Skip to main content
 首页 » 编程设计

python之使用用户输入字符串中的不等式

2025年05月04日38zhoujg

假设我正在编写一个程序来检查输入 [ 一个数字和相等语句 ] 与随机生成的数字相比是否为真,这是我的代码供引用:

import random 
 
class Checker(): 
    def __init__(self): 
        self.user_num=[] 
        self.comp_roll() 
        self.input_drive() 
    def comp_roll(self): 
        self.roll=random.randint(1,6)+random.randint(1,6) #roll 2 d6 
    def input_drive(self): 
        self.user_input=input("Input a number and [in]equality to compare against 2 random d6") 
        user_input=self.user_input 
        for i in range(len(user_input)): 
            if user_input[i].isdigit() == True: #if user_input[i] is a num 
                self.user_num.append(user_input[i]) #Keep track of just number from input in list 
            else: #if user_input[i] is not a num 
                if user_input[i] == ">": 
                    self.track_op=">" 
                elif user_input[i] == "<": 
                    self.track_op="<" 
                elif user_input[i] == "=": 
                    self.track_op="=" 
        self.user_num=int("".join(self.user_num)) #turn number list into one int 
        self.logic() 
    def logic(self): 
        dif=self.roll-self.user_num 
        abs_dif=abs(dif) 
        if self.track_op == ">": 
            if dif > 0: 
                win=True 
            else: 
                win=False 
        elif self.track_op == "<": 
            if dif < 0: 
                win=True 
            else: 
                win=False 
        elif self.track_op == "=": 
            if dif == 0: 
                win=True 
            else: 
                win=False 
        print("{result}\nComputer Guessed %d\nYou Guessed %d\nDifference %d".format(result="Win! :)" if win==True else "Lose :(") % (self.roll,self.user_num,abs_dif)) 
test=Checker() 

所以你应该能够看到我被迫使用一个 switch 语句来单独检查代码以查看是否有任何 >, <, =存在。
然后,我必须将其保存为一个具有等号值的字符串。

    for i in range(len(user_input)): 
        if user_input[i].isdigit() == True: #if user_input[i] is a num 
            self.user_num.append(user_input[i]) #Keep track of just number from input in list 
        else: #if user_input[i] is not a num 
            if user_input[i] == ">": 
                self.track_op=">" 
            elif user_input[i] == "<": 
                self.track_op="<" 
            elif user_input[i] == "=": 
                self.track_op="=" 

然后我在另一个 switch 语句中使用它来手动检查差异。

    dif=self.roll-self.user_num 
    abs_dif=abs(dif) 
    if self.track_op == ">": 
        if dif > 0: 
            win=True 
        else: 
            win=False 
    elif self.track_op == "<": 
        if dif < 0: 
            win=True 
        else: 
            win=False 
    elif self.track_op == "=": 
        if dif == 0: 
            win=True 
        else: 
            win=False 

我更愿意将 [in] 等号保存为使用与此类似概念的字典:

import operator 
ops = { "+": operator.add, "-": operator.sub } 

我确信一定有一种类似于上面的代码的更快的方法来执行此操作。我只是不确定该怎么做。

非常感谢您的帮助! :)

请您参考如下方法:

您很少需要使用 bool 文字。你的开关首先减少到

if self.track_op == ">": 
    win = dif > 0 
elif self.track_op == "<": 
    win = dif < 0 
elif self.track_op == "=": 
    win = dif == 0 

这应该很明显,您可以抽象出比较运算符。

comp_ops = {">": operator.gt, "<": operator.lt, "=": operator.eq} 
if self.track_op in comp_ops: 
    win = comp_ops[self.trac_op](dif, 0)