Python: Error in for loop
看,我今天开始学习Python,我陷入了困境。我正在解决一个非常简单的问题,我完成了它,但有一个问题。
首先,让我来谈谈这个问题和制约因素。问题是:
给定一个整数,
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 | n = input("") if n%2!=0 : print ("Weird") elif n%2==0 : for n in range(3,4,5) : print ("Not Weird") elif n%2==0 : for n in range(6,21) : print ("Weird") else : if (n%2==0 & n>20) : print ("Not Weird") |
我编译了代码,除了输入
你被要求专门用于循环吗?如果没有,你可以试试这个!
1 2 3 4 5 6 7 8 9 10 | n = int(input("")) if n%2==1: print("Weird") elif n%2==0 and n in range(3, 6): print("Not Weird") elif n%2==0 and n in range(6, 21): print("Weird") elif n%2==0 and n>20: print("Not Weird") |
。
那么,让我们一行一行地浏览您的代码,看看在输入18的情况下会发生什么:
1 2 | if n%2!=0 : print ("Weird") |
18模数2等于0,因此无法达到此打印语句。
下一步:
1 2 3 | elif n%2==0 : for n in range(3,4,5) : print ("Not Weird") |
。
你好,这一个匹配!因此,执行
然而,你不会看到你所期望的,因为
这不是
下面是您的代码的更正和注释版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 | if n%2 != 0: print ("Weird") else: #Don't need elif, there are only two cases odd, or not. #But, inside this branch we have three possibilities. if n in [2, 3, 4, 5]: #I just enumerate here, instead of using range. You forgot about 2, BTW print ("Not Weird") elif n in range(6,21) # Note the use of if (or elif), not for. print ("Weird") else: print ("Not Weird") |
您提供的代码有很多问题。
最明显的是,在if…else链的两个分支中重复了相同的条件。第二种情况,
1 2 | elif n%2==0: for n in range(6,21) : |
。
永远不会执行。
此外,在这些分支中使用for循环是不正确的。这些应该是条件。当您想重复一个动作时,可以使用循环,但这里有一个变量,您想问一个关于它的问题。这是一个"如果":
1 2 3 | elif n%2==0 : if n in range(3,4,5) : print ("Not Weird") |
但这导致了下一个bug,即使用
1 2 3 | elif n%2==0 : if n in range(2,7): print ("Not Weird") |
。
范围在底端包含,在顶端排除。乍一看,这似乎有点违反直觉,但在使用零索引时,这通常是您想要的。例如,您希望范围(10)有10个成员,并且以零开始,因此包含所有以10为基数的数字。你也可以这样写
1 2 3 | elif n%2==0 : if 2 <= n <= 6: print ("Not Weird") |
。
这是我的偏好。
你的主要问题是你在你的
在您的两个
考虑到您的要求,以下内容将简单得多:
1 2 3 4 5 6 7 8 | def isweird(n): if n%2 or n in range(6,21): return 'Weird' if n in range(2,6) or n > 20: return 'Not Weird' for n in range(23): print(n, isweird(n)) |
号
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 0 None 1 Weird 2 Not Weird 3 Weird 4 Not Weird 5 Weird 6 Weird 7 Weird 8 Weird 9 Weird 10 Weird 11 Weird 12 Weird 13 Weird 14 Weird 15 Weird 16 Weird 17 Weird 18 Weird 19 Weird 20 Weird 21 Weird 22 Not Weird |
您的范围(3、4、5)有问题。列表(范围(3,4,5))是[3]。。可能不是您期望的…范围是开始、停止、步骤。
您可以在[3,4,5]或范围(3,6)中对n执行此操作。
你有两个条件相同的elif,它不应该。更改或删除一个elif
1 2 3 4 5 6 7 8 9 10 | n = input("") if n%2!=0 : print ("Weird") elif n%2==0 : if n>20: print ("Not Weird") for n in range(3,4,5) : #range shouldn't be like this. But for your understanding i leave it as it is print ("Not Weird") for n in range(6,21) : print ("Weird") |
最后的其他也不需要