Python 打印代码不起作用

Python 打印代码不起作用,python,if-statement,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: pr

我用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

这不是解决问题的最简单方法。我想你的代码应该是这样的

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
但是你为什么不在时使用常规的

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
最简单的方法:

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
当计数器<4时:
彩虹=“红色、橙色、黄色、绿色、蓝色、靛蓝、Voilet”
颜色=输入(“输入彩虹颜色”)
l=彩虹分割(“,”)
如果l中有color.title():
印刷品(彩色)
计数器+=1

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

  • while
    not
    while
  • 不良压痕
  • rainbow
    是一个字符串,而不是列表
  • rainbow
    包含大写字符串
  • 首先,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
    
    这意味着您的代码将永远留在
    循环中,而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
    
    另一种方法是使用条件
    中断
    ,而不是

    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
    
    "lue" in "Blue" # == True
    
    第三,因为您只想匹配您定义的颜色,所以使用字符串不会剪切它。使用字符串时,以下表达式的计算结果为
    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
    
    "lue" in "Blue" # == True
    
    因为Python只是检查值
    “lue”
    是否在字符串
    “Blue”
    中。类似地,如果您使用一个长字符串,例如
    “Red,Orange,Yellow,Green,Blue,Indigo,Voilet”
    ,它也会做同样的事情

    你想要的是一份清单。以下计算结果为
    False

    "lue" in ["Blue"] # == False
    
    现在Python以不同的方式看待它。
    “lue”是否在列表中?答案是否定的。因此,您应该使用:

    ["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"]
    
    那就行了。请注意,violet的拼写是voilet,我不确定这是否是另一种语言,所以我将其保持不变

    您还应注意以下事项:

  • 命名变量的惯例是使用带下划线的小写字母。大写的名称通常用于类。您可以在中阅读有关约定的更多信息
  • 当您想执行
    计数器=计数器+1

  • 在哪种情况下,强制使用颜色的小写字母(如
    red
    )会与该字符串中的
    red
    颜色匹配?:-)此外,大写的
    打印
    应引发
    名称错误
    。发帖前是否运行代码?好的,谢谢,但根据我所学,.lower()对象可以将大写字符串转换为小写。lower()将
    color
    中的值返回为小写,但
    rainbow
    中的值为propercaseCool,也可以使用color.title()而不是color.lower()Kirill,感谢您的帮助,但是如果我输入一个单词说“yello”,而不是“yello”,代码仍然无法正常工作,即使if语句将其计算为false,我仍然会打印单词“yello”。您可以使用
    color[1://code>而不是
    color[1:len(color)]
    ,Python假定它位于字符串的末尾。您也可以使用
    .capitalize()
    ,它会自动将所有内容小写,并将第一个字母大写。请注意,
    capitalize()
    不同于
    title()
    ;前者仅大写第一个字母,后者大写由空格分隔的每个第一个字母。