Python 实现同样目标的更好方法?

Python 实现同样目标的更好方法?,python,python-3.x,Python,Python 3.x,这是最有效的方法吗?这是可行的,但我想知道是否有更好的方法来做同样的事情。选择操作后的嵌套if看起来不是很干净,即使它可以工作 des = " " while des != "n" or "no": # Operators add = "+" minus = "-" multiply = "*" divide = "/" # Prompt n1 = in

这是最有效的方法吗?这是可行的,但我想知道是否有更好的方法来做同样的事情。选择操作后的嵌套if看起来不是很干净,即使它可以工作

des = " "

while des != "n" or "no":
# Operators
add = "+"
minus = "-"
multiply = "*"
divide = "/"

# Prompt
n1 = int(input("1: "))
operator_selection_prompt = input('Select operation (+, -, *, /): ')
n2 = int(input("2: "))

if(operator_selection_prompt == add):
    r = n1 + n2
    print(r)
    des = input("Re-Run? (y/n): ")
    if des not in ('n', 'no', 'y', 'yes'):
        print('no valid')
        break
elif(operator_selection_prompt == minus ):
    r = n1 - n2
    print(r)
    des = input("Re-Run? (y/n): ")
    if des not in ('n', 'no', 'y', 'yes'):
        print('no valid')
        break
elif(operator_selection_prompt == multiply):
    r = n1 * n2
    print(r)
    des = input("Re-Run? (y/n): ")
    if des not in ('n', 'no', 'y', 'yes'):
        print('no valid')
        break
elif(operator_selection_prompt == divide):
    r = n1 // n2
    print(r)
    des = input("Re-Run? (y/n): ")
    if des not in ('n', 'no', 'y', 'yes'):
        print('no valid')
        break

检查一下以供参考。在你的情况下是这样的:

导入操作符
des=“”
操作={
“+”:operator.add,
“-”:operator.sub,
“/”:operator.truediv,
“*”:operator.mul,
}
而des!=“n”或“否”:
n1=int(输入(“1”))
运算符\选择\提示=输入('选择操作(+、-、*、/):')
n2=int(输入(“2:”)
打印(操作[操作员选择提示](n1,n2))
des=输入(“重新运行(y/n):”)

仅执行一次打印和测试中断。大写的常量。添加else,以便始终定义r。删除了不必要的括号

@tbjorch更进一步,但这看起来像是初学者的练习,所以我将把它留给基本的东西

des = " "

while des != "n" or "no":
    # Operators
    ADD = "+"
    MINUS = "-"
    MULTIPLY = "*"
    DIVIDE = "/"

    # Prompt
    n1 = int(input("1: "))
    operator_selection_prompt = input('Select operation (+, -, *, /): ')
    n2 = int(input("2: "))

    if operator_selection_prompt == ADD:
        r = n1 + n2
    elif operator_selection_prompt == MINUS:
        r = n1 - n2
    elif operator_selection_prompt == MULTIPLY:
        r = n1 * n2
    elif operator_selection_prompt == DIVIDE:
        r = n1 // n2
    else:
        r = None  # needed otherwise entering "%" would cause r to be undefined for print(r)
    print(r)
    des = input("Re-Run? (y/n): ")
    if des not in ('n', 'no', 'y', 'yes'):
        print('no valid')
        break

我会这样做:

while True :

    n1 = input ("1: ")
    operator = input ('Select operation (+, -, *, /): ')
    n2 = input ("2: ")

    if n1.isnumeric () and n2.isnumeric () and operator in ('+', '-', '*', '/') :
        print (eval (f'{n1}{operator}{n2}'))
    else : print ('Error!')

    des = input("Re-Run? (y/n): ")
    if des not in ('y', 'yes', 'Y', 'Yes') :
        break

这应该是。考虑到代码中直接错误的数量,我会说“不,这不是最佳的”,“最有效的方法”-做什么?我想你正在寻找类似的东西。检查这个问题的答案@orlp谢谢。在这里它可以工作,但是如果我输入n以外的任何东西,它将根据while循环的条件准确地继续。我只是想根据你的需要进行编辑,我只是把重点放在了elifs上,让它更苗条。编辑的答案删除如果与中断,因为while循环处理该部分,使它更短的兄弟!谢谢。这也行,谢谢。