我正在尝试编写一个简单的计算器,但我遇到了问题。我似乎无法添加,减去,乘以或除以两个变量并打印它们。我正在尝试编码,以便用户可以与操作员一起输入数字。有任何想法吗?
谢谢,
SanguineL
Unit: milliseconds
expr min lq mean median uq max neval
f1() 100.0000 107.0000 115.0000 115.0000 117.0000 127.0000 10
f2() 202.0000 209.0000 212.0000 212.0000 214.0000 227.0000 10
答案 0 :(得分:1)
您需要区分来自raw_input
的字符串与运算符所代表的函数。
if operator == "+":
answer = number1 + number2
elif ...
operator
模块允许您构建一个抽象查找过程的字典:
import operator
number1 = raw_input ("What is the first number?")
op = raw_input ("What is the operator?")
number2 = raw_input ("What is the second number?")
funcs = {"+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.div}
try:
f = funcs[op]
except KeyError:
raise ValueError("Undefined operator %s" % (op,))
answer = f(number1, number2)
答案 1 :(得分:0)
不知道raw_input ("What is the first number?")
是什么意思(假设它是某种形式输入或sdt_in),但下半部分可能是(不要忘记转换你的输入,如number1 = int(number1)
) :
if operator == '+'
answer = number1 + number2
elif operator == '-'
answer = number1 - number2
elif operator == '*'
answer = number1 * number2
elif operator == '/'
answer = number1 / number2
print(answer)
答案 2 :(得分:0)
所以你的代码有几个问题,第一个问题是raw_input
总是假设输入是一个字符串,所以你的number1,operator和number2对象将是字符串(我假设你只想要运算符变量为字符串)。如果要将数字转换为浮点数,则需要编写类似number1 = float(raw_input ("What is the first number?"))
第二个问题是您需要使用if
语句而不是if
语句启动elif
块。 elif
语句仅在if
语句之后出现,因为它代表“else if” - 即表单中的其他内容如果有的话。
第三个问题是您没有在条件语句中为您的运算符添加引号。 Python不会自动假设它们是字符串。 Python将假设它们是您尚未声明的变量。您应该有elif operator == '-'
之类的声明,以使比较有效。
第四个也是最后一个问题(我看到)是因为你正在使用raw_input
,看起来你正在使用python 2.当使用除法运算符/
时,Python 2有一个奇怪的行为 - 即如果对它的输入是ints
或longs
,它会对该部门进行底层。如果您不了解这种行为,可能会引起很多麻烦。您可能应该在代码的开头包含一个from __future__ import division
行,因此除以答案。