Python:for循环中的错误

时间:2017-06-21 19:03:02

标签: python python-2.7

看,我今天开始学习Python,但我陷入困境。 我正在解决一个非常简单的问题而且我完成了它但是有一个问题。

首先,让我讲述问题和约束。这是一个问题:

给定一个整数n,执行以下条件操作:

  1. 如果nodd,请打印Weird
  2. 如果neven,并且在2 to 5的包含范围内,请打印Not Weird
  3. 如果neven,并且在6 to 20的包含范围内,请打印Weird
  4. 如果neven且大于20,请打印Not Weird
  5. 这是我的代码:

    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")
    

    我编译了代码,一切都很好,但对于输入1820我必须得Weird作为输出,但我得到Not Weird。任何人都可以帮助我吗?

12 个答案:

答案 0 :(得分:0)

你有2个elif同样的条件它不应该。  改变它或删除一个elif

Retrofit2

最后其他也不需要

答案 1 :(得分:0)

你的范围问题(3,4,5)。列表(范围(3,4,5))是[3] ..可能不是你所期望的......范围是开始,停止,步骤。

你可以在[3,4,5]或范围(3,6)

中为n做

答案 2 :(得分:0)

您的主要问题是您不断在n循环中重新定义for,因此在第一个for循环后的每个条件语句中,n不是什么最初是给了。

n=18n=20的两种情况下,第一个条件n%2!=0为False,因此测试第二个条件。 n%2==0True,因此执行for n in range(3,4,5):循环。该循环的第一次(也是唯一的)迭代将n设置为3并打印“Not Weird”。由于n现在为3,因此您的代码中没有剩余条件为True,因此它们不会执行。

根据您的要求,以下内容会更简单:

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

输出:

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 :(得分:0)

您提供的代码存在许多问题。

最明显的是你在if ... else链的两个分支中重复了相同的条件。第二个这样的条件,

elif n%2==0:
    for n in range(6,21) :

永远不会执行。

此外,在这些分支中使用for循环是不正确的。那些应该是条件。当你想重复一个动作时,你使用一个循环,但是你有一个变量,你想问一个关于它的问题。这是一个“如果”:

elif n%2==0 :
    if n in range(3,4,5) :
            print ("Not Weird")

但这会导致下一个错误,即使用range。如上所述,您将指定以3开头的数字范围,最多运行4(不包括),步长为5.这将是包含3的范围。 要指定从2到6的包含范围,您可以编写

elif n%2==0 :
    if n in range(2,7):
            print ("Not Weird")

范围底端包含范围,顶端独占。这一开始似乎违反直觉,但在使用零索引时,它通常是您想要的。例如,您希望range(10)有10个成员,并且从零开始,因此包含所有的十进制数字。 您也可以将其写为

elif n%2==0 :
    if 2 <= n <= 6:
            print ("Not Weird")

这将是我的偏好。

答案 4 :(得分:0)

所以,让我们逐行浏览你的代码,看看在输入18的情况下发生了什么:

 if n%2!=0 :
     print ("Weird")

18模数2等于0,因此不会达到此打印语句。

下一步:

 elif n%2==0 :
     for n in range(3,4,5) :
         print ("Not Weird")

您好,这个匹配!因此,将执行for语句。 您的if / elif / else链中的任何其他语句都不会达到值18,因为您在此处找到了匹配项。

然而,您不会看到您的期望,因为for声明没有按照您的想法执行。您认为它会查看n,并且在列表[3,4,5]中找到n的值,将打印值Not Weird

这不是for所做的。相反,n更改到该范围中的每个值,并且循环内的代码将在n设置为该值的情况下执行。现在,您想知道为什么,如果是这种情况,您看不到Not Weird打印三次?原因是range是一个函数并且它不返回所提供数字的列表,它返回一组以(在您的示例中)3开头并以4结尾但仅以每5日结束的数字数。巧合的是,这只给range只有1个值(值3),这就是Not Weird只出现一次的原因。

以下是您的代码的更正和注释版本:

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")

答案 5 :(得分:0)

您是否专门要求使用for循环?如果没有,你可以试试这个!

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")

答案 6 :(得分:0)

 n = int(input())
if n % 2 != 0:
    print('Weird')
elif n % 2 == 0 and n in range(2, 6):
    print('Not Weird')

elif n % 2 == 0 and n in range(5, 21):
    print('Weird')

elif n % 2 == 0 and n > 20:
    print('Not Weird')

这将起作用。...关键点包括在内。

答案 7 :(得分:0)

n = int(input().strip())
check = {True: "Not Weird", False: "Weird"}

print(check[
        n % 2 == 0 and (
            n in range(2, 6) or 
            n > 20)
    ])

这是最短的解决方案,不使用if。

答案 8 :(得分:0)

这是一个直接的解决方案:

n = int(input())
if n%2==0 and n not in range(6,21):
    print("Not Weird")
else:
    print("Weird")

答案 9 :(得分:0)

var3

答案 10 :(得分:0)

Try this: 
            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>21:
           print("Not Weird")

答案 11 :(得分:0)

n=3
if(n%2!=0):
  print("Weird")
else:
    if(n>=2 and n<=5):
      print("Not Weird")
    elif(n>=6 and n<=20):
      print("Weird")
    elif(n>20):
      print("Not Weird")