Python如果其他人

时间:2018-02-14 03:41:43

标签: python loops nested

`

is_summer = True
 print("Values 1-12 correlate to the months of the year")
 while is_summer == True:
     _month = int(input("Enter the month of the year: "))
     if _month == 4 or 5 or 6 or 7 or 8:                 
         is_summer = int(input("It is summer, what is the temperature?: "))
         if is_summer in range(60,101):                  
             print("The squirrels are playing")
         else:
             print("The squirells are not playing")      
     elif _month == 1 or 2 or 3 or 9 or 10 or 11 or 12:   
         is_summer = int(input("It is winter, what is the temperature?: "))
         if is_summer in range(60,91):
             print("The squirrels are playing")           
         else:
             print("The squirrels are not playing")
    `

如果我输入1,2,3,9,10,11或12,我的代码将不会转到elif语句。我的嵌套if语句是否错误,或者是否是其他内容?

4 个答案:

答案 0 :(得分:1)

您的条件语句的工作原理如下,这就是为什么条件对于您提供的输入并不总是正确的原因。

>>> month = 4
>>> month == 4 or 5 or 6
True
>>> month = 5
>>> month == 4 or 5 or 6
5

您可以使用in运算符检查您使用_month检查的值列表中是否存在orin运算符的工作方式如下

month = 1
month in [1,2,3,4,5] # True
month in [2,3,4,5,6] # False

因此,您可以将程序更改为

is_summer = True
print("Values 1-12 correlate to the months of the year")
while is_summer == True:
    _month = int(input("Enter the month of the year: "))
    if _month in [4,5,6,7,8]:                 
        is_summer = int(input("It is summer, what is the temperature?: "))
        if is_summer in range(60,101):                  
            print("The squirrels are playing")
        else:
            print("The squirells are not playing")      
    elif _month in [1,2,3,9,10,11,12]:   
        is_summer = int(input("It is winter, what is the temperature?: "))
        if is_summer in range(60,91):
            print("The squirrels are playing")           
        else:
            print("The squirrels are not playing")

答案 1 :(得分:1)

您的问题与if语句有关。

if _month == 4 or 5 or 6 or 7 or 8: 

检查_month == 4,或者5是否真实,或者6是否真实等等。

你想做的事:

if _month == 4 or _month ==5 or _month == 6 or _month == 7 or _month == 8:

或更简洁

if 4 <= _month <= 8:

为你的elif做同样的事。虽然如果你知道_month是从1到12,那么它真的可能只是一个别的,而不是一个elif

答案 2 :(得分:1)

您的代码未按预期执行的原因是因为您实际上并未检查_month是否等于每个数字。

if _month == 1 or 2 or 3if _month == 1 or _month == 2 or _month == 3不同。

将第一个视为if (_month == 1) or (2) or (3)_month == 1评估为False,但23为非零值,评估为True,因此始终采用第一个if

答案 3 :(得分:1)

您的第一个if声明基本上是说_month是4 - 很棒 - 或者5或6或7或8会评估为True。在Python的if语句中,正整数将始终计算为True -

if 1:
  print("hello!")

将始终打印hello!。您的if语句需要如下所示,而不是:

if _month == 4 or _month == 5 or _month == 6 or _month == 7 or _month == 8:
  print("hurrah!")

然而,这已经变得不必要了 - 我们可以使用比较运算符(如小于(>)和大于(<)来简化这一点,如下所示:

if _month < 3 and _month > 9:
  print("hurrah!")