我试图制作一个计算器,但出于某种原因,当涉及到选择操作时,它只会添加elif语句,即使我输入正确的命令也不会执行
print("welcome to the simple calculator please type in a number")
#user enters 1st number
Num1=int(input("type a number between 0-9"))
#user enters 2nd number
Num2=int(input("please type in your second number"))
#user enters the operation that is used
Ope=input("would you like to divde,add,subtract or times")
#adds the numbers
if Ope=="add"or"Add":
print(Num1+Num2)
#subtracts the numbers
elif Ope=="subtract" or "Subtract":
print(Num1-Num2)
elif Ope=="times" or "Times":
print(Num1*Num2)
elif Ope=="divide" or "Divide":
print(Num1/Num2)
答案 0 :(得分:1)
代码Ope=="add"or"Add"
按照operator precedence定义的顺序进行评估:首先==
,然后是or
。
因此,对于除“add”之外的任何Ope
,它的评估结果为:
(Ope == "add") or "Add"
=> False or "Add"
=> "Add"
并且对于Ope
等于“add”,它的评估结果为:
(Ope == "add") or "Add"
=> True or "Add"
=> True
因此,该值为"Add"
或True
,并且它们都是 true (请参阅truth value testing)和第一个if
永远都会满意。
(另见how or
works)
if Ope.lower() == "add":
...
elif Ope.lower() == "subtract":
...
答案 1 :(得分:0)
你在这里做的两件奇怪的事情会引起你的问题:
将单个变量与多个值进行比较时,有很多方法可以做到,但为了简单起见,您应该更改:
if Ope == "add" or Ope == "Add":
到
Ope == "add" or "Add"
这是不与多个值进行比较的最佳方式,但这是一种简单的方法来执行尝试的操作。但是,您将以现在的方式获得意想不到的结果。 True
始终为Ope == "add"
,因为这实际上是检查"Add"
和True
的真值,并返回第一个评估为True
的值,如果两者都不是bool("Add")
,则为第二个。在这种情况下,True
始终为if
,因此您始终会获得.lower()
块。如果这对你没有意义,不要担心;在我看来,这确实令人困惑。如果你使用Python足够长的时间,那么你最终会得到它。
您正在检查案例,只需Ope
Ope = input("would you like to divide,add,subtract or times").lower()
if Ope=="add": # and do the same for the elif statements
...
的值并测试小写版本:
{{1}}