为什么elif语句不起作用?

时间:2016-09-15 20:24:35

标签: python-3.x

我试图制作一个计算器,但出于某种原因,当涉及到选择操作时,它只会添加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)

2 个答案:

答案 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)

你在这里做的两件奇怪的事情会引起你的问题:

  1. 将单个变量与多个值进行比较时,有很多方法可以做到,但为了简单起见,您应该更改:

    if Ope == "add" or Ope == "Add": 
    

    Ope == "add" or "Add"

    这是与多个值进行比较的最佳方式,但这是一种简单的方法来执行尝试的操作。但是,您将以现在的方式获得意想不到的结果。 True始终为Ope == "add",因为这实际上是检查"Add"True的真值,并返回第一个评估为True的值,如果两者都不是bool("Add"),则为第二个。在这种情况下,True始终为if,因此您始终会获得.lower()块。如果这对你没有意义,不要担心;在我看来,这确实令人困惑。如果你使用Python足够长的时间,那么你最终会得到它。

  2. 您正在检查案例,只需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}}