How to run the math from an input in python
我正在用Python创建一个需要运行基本数学操作的游戏。这些操作将由用户提供作为输入。我该怎么做?
到目前为止,我为每个数字和每个运算符都有独立的变量,但是,当我运行代码时,它不将运算符
1 2 3 4 5 6 7 8 9 10 11 12 | print("Now you can solve it.") vinput1=int(input("Please input the first number")) print("First number is recorded as", vinput1) vop1=input("Please input your first operator") print("Your operator is recorded as", vop1) vinput2=int(input("Please input the second number")) print("Second number is recorded as", vinput2) vsofar = (vinput1, vop1, vinput2) print(vsofar) |
计算机输出:
1 | (1, '+', 1) |
最安全和最简单的方法是使用if语句检查输入的符号。if语句示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | print("Now you can solve it.") vinput1=int(input("Please input the first number")) print("First number is recorded as", vinput1) vop1=input("Please input your first operator") print("Your operator is recorded as", vop1) vinput2=int(input("Please input the second number")) print("Second number is recorded as", vinput2) if (vop1 =="-"): vsofar = vinput1 - vinput2 print(vsofar) elif (vop1 =="+"): vsofar = vinput1 + vinput2 print(vsofar) elif (vop1 =="/"): vsofar = vinput1 / vinput2 print(vsofar) elif (vop1 =="*"): vsofar = vinput1 * vinput2 print(vsofar) else print("Invalid operator entered.") |
为了快速解释,这些if语句检查输入的运算符(存储在vop1中)是否与-、+、*或/运算符匹配。如果它与其中任何一个匹配,则执行其各自的操作,并将其存储在变量vsofar,cw中,该变量在该操作之后打印在行中。如果所有操作都不起作用,则会打印一条无效的语句。
这是最平淡,最简单,也有点长的路要走。但是,eval()函数不安全。保罗·鲁尼的回答比我的方式短但更复杂。
希望这有帮助!
虽然
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from ast import literal_eval print("Now you can solve it.") vinput1=int(input("Please input the first number")) print("First number is recorded as", vinput1) vop1=input("Please input your first operator") print("Your operator is recorded as", vop1) vinput2=int(input("Please input the second number")) print("Second number is recorded as", vinput2) vsofar = (vinput1, vop1, vinput2) print(literal_eval(''.join(map(str, vsofar)))) |
否则,创建从运算符到函数的映射,以查找要为每个运算符调用的函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import operator import sys ops = {'+': operator.add, '-': operator.sub} v1 = int(input('enter first num')) op1 = input('input operator') if not op1 in ops: print('unsupported operation') sys.exit(1) v2 = int(input('enter second num')) print(ops[op1](v1, v2)) |
最重要的是,您不必在程序逻辑中纠结于添加新的(二进制)操作。您只需将它们添加到dict中,就没有机会在长if/elif链中进行拼写错误。
如果不想使用eval(),可以尝试使用一系列条件来测试运算符,然后根据这些条件执行正确的计算。
1 2 3 4 | if vop1 =="+": return vinput1 + vinput2 if vop1 =="-": return vinput1 - vinput2 |
你可以评估!
1 2 3 4 5 | >>> input1=1 >>> input2=3 >>> vop1="+" >>> print eval(str(input1)+vop1+str(input2)) 4 |
看看这个
希望这有帮助!