打印代码拒绝工作

时间:2017-08-26 13:00:33

标签: python if-statement

我在Python中有这个代码,而我想在用户输入的颜色中打印一个文本,可以在变量中找到。这就是代码的样子

Counter = 1
While True:
           rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
color = input ("Enter your rainbow color;")

即使条件评估为true,此打印颜色代码也不起作用。

if color.lower () in rainbow:
    print (color)

if Counter == 4
    break
Counter = Counter +1

2 个答案:

答案 0 :(得分:1)

不是解决问题的最简单方法。我认为你的代码应该看起来像这样

Counter = 1
while True:
    rainbow="red,orange,yellow,green,blue,indigo,voilet"
    color = input ("Enter your rainbow color")
    if color.lower() in rainbow:
        print(color)
    if Counter == 4:
        break
    Counter = Counter +1

但为什么不使用常规while

Counter = 1
while Counter < 4:
    rainbow="red,orange,yellow,green,blue,indigo,voilet"
    color = input ("Enter your rainbow color ")
    if color.lower() in rainbow:
        print(color)
    Counter += 1

另外如果你想把你的第一个字母大写,只需改变这样的语句(如果你还没有读取字符串切片)

if color[0] + color[1:len(color)].lower() in rainbow:
        print(color)

最简单的方法:

Counter = 1
while Counter < 4:
    rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
    color = input ("Enter your rainbow color ")
    l = rainbow.split(",")
    if color.title() in l:
        print(color)
    Counter += 1

答案 1 :(得分:0)

您的代码中存在一些问题。主要是这些:

  1. while不是While
  2. 不良缩进
  3. rainbow是一个字符串,而不是一个列表
  4. rainbow包含大写字符串
  5. 首先,Python是一种区分大小写的编程语言,如果你在代码中使用While而不是while,它会给你一个错误。但是,我相信它只是一个复制粘贴错误,因为这不是你提出的问题。

    其次,您的代码没有正确缩进。虽然这两个部分在你的问题中是不相交的,但我认为它是:

    Counter = 1
    while True:
        rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
    color = input ("Enter your rainbow color;")
    
    if color.lower () in rainbow:
        print (color)
    
    if Counter == 4
        break
    Counter = Counter +1
    

    这意味着您的代码将永远保留在while True:循环中。我认为你打算做的是获得4个有效的用户输入,然后离开循环。在这种情况下,您应该在while循环下缩进代码:

    Counter = 1
    while True:
        rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
        color = input ("Enter your rainbow color;")
    
        if color.lower () in rainbow:
            print (color)
    
        if Counter == 4
            break
        Counter = Counter +1
    

    另一种方法是将条件用于break而不是True

    Counter = 1
    while Counter != 4:
        rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
        color = input ("Enter your rainbow color;")
    
        if color.lower () in rainbow:
            print (color)
    
        Counter = Counter +1
    

    第三,正如您希望仅匹配已定义的颜色一样,使用字符串不会将其剪切掉。使用字符串时,以下表达式将计算True

    "lue" in "Blue" # == True
    

    由于Python只检查值"lue"是否在字符串"Blue"中。同样,如果你使用一个长字符串,如"Red,Orange,Yellow,Green,Blue,Indigo,Voilet",它也会做同样的事情。

    你想要的是一个清单。以下评估False

    "lue" in ["Blue"] # == False
    

    现在Python以不同的方式看待它。 {strong>列表<{strong> "lue"中有["Blue"]吗?答案是不。所以,你应该使用:

    ["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Voilet"]
    

    或者,如果您想动态执行此操作,.split(",")会为您生成:

    "Red,Orange,Yellow,Green,Blue,Indigo,Voilet".split(",")
    

    之后,您将获得如下代码:

    Counter = 1
    while True:
    
        rainbow=["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Voilet"]
        color = input("Enter your rainbow color;")
    
        if color.lower() in rainbow:
            print(color)
    
        if Counter == 4
            break
        Counter = Counter +1
    

    但是,它仍然不起作用,因为您始终将"Red""red"等字词匹配。您正在使用.lower()小写整个输入。相反,您可以.capitalize()输入,也可以将其匹配的"Red"小写:

    # .capitalize() the input
    if color.capitalize in rainbow:
        # code...
    
    # lowercase the "Red"
    rainbow = ["red", "orange", "yellow", "green", "blue", "indigo", "voilet"]
    

    这样就可以了。请注意,紫罗兰拼写为voilet,我不确定这是否是另一种语言所以我保持不变。

    您应该注意的其他事项是:

    1. 命名变量的约定是带有下划线的小写。大写名称通常用于课程。您可以在PEP 8
    2. 中详细了解约定
    3. 当您想要+=
    4. 时,有一个counter = counter + 1