2017-08-26 13 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文だけ変更大文字(あなたはまだいない場合は試合文字列のスライスを読む)

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.lower()の代わりにcolor.title()を使用することもできます – RuthC

+0

Kirill、助けてくれてありがとうございます。 "イエロー"の代わりに "yello"と言う単語を入力すると、まだうまく動作しません。if文でfalseを評価しても、 "yello"という単語が表示されます。 –

+0

'color [1:len(color)]'の代わりに '' color [1:] 'を使うことができます。Pythonはそれが文字列の最後であるとみなします。 '.capitalize()'を使うこともできます。自動的にすべてを小文字にし、最初の文字を大文字にします。 'capitalize()'は 'title()'とは異なることに注意してください。前者は最初の文字を大文字にし、後者はスペースで区切られたすべての最初の文字を大文字にします。 –

0

コードにはいくつか問題があります。主なものは、これらは以下のとおりです。

  1. whileないWhile
  2. 悪いインデント
  3. rainbowが文字列ではなく、リスト
  4. rainbowはまず、Pythonのような場合は大文字の文字列

が含まれていますあなたのコードにwhileの代わりにWhileを使用する場合、それは賢明なプログラミング言語です私はあなたに誤りを投げます。しかし、私はあなたが提起した問題ではないので、それは単なるコピーアンドペーストエラーであると信じています。

第2に、コードが正しくインデントされていません。あなたのコードだけで永遠にwhile True:ループに滞在することを意味する

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 

:二つのセクションは、あなたの質問にばらばらですが、私はそれがあると仮定します。私があなたが意図したと思うのは、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 

"lue"が文字列"Blue"であればPythonはちょうどチェックなど。同様に、"Red,Orange,Yellow,Green,Blue,Indigo,Voilet"のような長い文字列を使用すると、同じことが実行されます。

あなたが望むものはリストです。以下はFalse評価:

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

今Pythonは異なる方法でそれを見て。はリスト["Blue"]にありますか?答えはいいえだ。だから、あなたが使用する必要があります。

["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,Orange,Yellow,Green,Blue,Indigo,Voilet".split(",") 

を、次のようなコードを取得します

しかし、"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
関連する問題