2017-08-26 67 views
-1

我在Python中有这样的代码,并且我想在用户输入的颜色中打印文本可以在变量中找到。这是怎样的代码看起来像打印代码拒绝工作

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 
+0

在什么宇宙将颜色强制小写(像'red')有史以来匹配的颜色'Red'在该字符串? :-) – paxdiablo

+0

另外大写的'Print'应该引发'NameError'。在发布之前,您是否**运行**代码? – Gribouillis

+0

好的,谢谢,但从我被教导的“.lower()”对象可以将大写字符串转换为小写字母。 –

回答

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 
+0

也可以使用color.title()代替color.lower() – RuthC

+0

Kirill,感谢您的帮助,但代码如果我输入一个单词说“yello”,而不是“黄色”,仍然无法正常工作,即使if语句将其评估为false,我仍然会打印出“yello”一词。 –

+0

你可以使用'color [1:]'而不是'color [1:len(color)]',Python假定它到了字符串的末尾。你也可以使用'.capitalize()',它会自动将所有内容小写,并且首字母大写。请注意,'capitalize()'不同于'title()';前者仅将首字母大写,后者则用首字母大写。 –

0

你的代码有几个问题。主要的有这些:

  1. whileWhile
  2. 坏压痕
  3. rainbow是一个字符串,而不是一个列表
  4. 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 

这将意味着你的代码将仅仅停留在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以不同的方式查看它。 "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"] 

这将这样的伎俩。请注意紫罗兰是拼音,我不确定这是否是另一种语言,所以我保持不变。

,你应该注意的其他事情是:

  1. 变量命名的惯例是用下划线小写。大写的名字通常用于类。您可以在PEP 8中阅读有关约定的更多信息。
  2. 有一个+=,当你想要做的counter = counter + 1