3 回答

TA贡献1887条经验 获得超5个赞
您应该检查用户是否输入了有效的操作,try except因为input()不会抛出任何错误,所以在这里不起作用。还有更优雅的方法可以从用户那里获取 2 个有效整数,并计算最终方程(使用eval())
inputNumbers = ["first number", "second number"]
operations = ['+', '-', '*', '/']
numbers = []
operator = ''
while not operator:
operator = input('Please choose a valid operation (+, -, *, /): ')
if operator not in operations:
print("Please enter a valid operator.")
while len(numbers) < len(inputNumbers):
try:
numbers.append(int(input("Type in {}: ".format(inputNumbers[len(numbers)]))))
except:
print("Please enter a whole number.")
result = eval(operator.join(map(str, numbers)))
print('{} {} {} = {}'.format(numbers[0], operator, numbers[1], result))
输出:
Please choose a valid operation (+, -, *, /): addition
Please enter a valid operator.
Please choose a valid operation (+, -, *, /): /
Type in first number: 123.321
Please enter a whole number.
Type in first number: 10
Type in second number: hundred
Please enter a whole number.
Type in second number: 100
10 / 100 = 0.1

TA贡献1810条经验 获得超4个赞
您应该使用python的内置operator 模块。然后你可以使用这样的字典:
import operator
operator_dict = {"+": operator.add,
"-": operator.sub,
"*": operator.mul,
"/": operator.truediv}
user_input = input("Please choose a valid operation (+, -, *, /): ")
operator_func = operator_dict.get(user_input, None)
# if operator_func is not None then the input was correct!
if operator_func is not None:
... get the numbers ...
print("{}{}{}={}".format(num1, user_input, num2, operator_func(num1, num2))
这样您就不需要自己实现简单的运算符功能。

TA贡献1775条经验 获得超8个赞
最简单和最干净的方法是使用operatorPython 中的模块,因此您的userOutput方法将如下所示。但是,您应该对代码进行一些更改,将小时operator变量重命名为op,因为它会与 python 模块名称冲突,并将 更新operator为从 的返回userInput():
import operator
op = ""
numbers = []
inputNumbers = ["first number", "second number"]
operators = {
'+' : operator.add,
'-' : operator.sub,
'*' : operator.mul,
'/' : operator.truediv,
'%' : operator.mod,
'^' : operator.xor,
}
def userInput(op):
while not op:
op = input("Please choose a valid operation (+, -, *, /): ")
if op not in operators:
print("Please enter a valid operator.")
op = ""
for inputNumber in inputNumbers:
user_num_input = -1
while user_num_input < 0:
try:
user_num_input = int(input("Type in {}: ".format(inputNumber)))
except:
user_num_input = -1
print("Please enter a whole number.")
if user_num_input > -1:
numbers.append(user_num_input)
return op
def userOutput(op, operators):
result = operators[op](numbers[0], numbers[1])
print("{} {} {} = {}". format(numbers[0], op, numbers[1], result))
op = userInput(op)
userOutput(op, operators)
添加回答
举报