2011-12-23 16 views
2

これは私が読んでいるPythonの本の例です。プログラムを実行しようとするとエラーが発生し、エラーのコードを確認するとelifが赤で強調表示されます。私はPython 2.5でプログラミングしています。elif文のエラー

import random 

secret = random.randint(1, 99) 
guess = 0 
tries = 0 

print "It is a number between 1 and 99. I'll give you six tries. " 

while guess != secret and tries < 6: 
    guess = input("What's your guess? ") 
    if guess < secret: 
     print "Too low!" 
     elif guess > secret: 
      print "Too high" 
      tries = tries + 1 
      if guess == secret: 
       print "Correct! You found my secret!" 
       else: 
        print "No more guesses! Better luck next time!" 
        print "The secret number was", secret 
+1

いつものように詳細に説明するように、あなたは何を得るのエラーを指定可能です(例:トレースバックを含むエラーメッセージをそのままコピーしてください)。 – delnan

+0

また、n00bの綴りです。 – milancurcic

+0

ヒントをありがとう。 – stumped

答えて

5

Pythonはインデントセンシティブです。

import random 

secret = random.randint(1, 99) 
guess = 0 
tries = 0 

print "It is a number between 1 and 99. I'll give you six tries. " 

while guess != secret and tries < 6: 
    guess = input("What's your guess? ") 
    if guess < secret: 
     print "Too low!" 
    elif guess > secret: 
     print "Too high" 
     tries = tries + 1 
    elif guess == secret: 
     print "Correct! You found my secret!" 
    else: 
     print "No more guesses! Better luck next time!" 
     print "The secret number was", secret 

編集:私はそのようなコードのどこかでなければなりませんtries = tries + 1として、このバグは、まだそこにいることを知っています。しかし、このバージョンでは少なくとも構文エラーはありません。

+0

フェリックスはお金の上でそれを打ちました。また、インデントしているものが一貫していることを確認してください。スペースを使用する場合は、毎回同じ数のスペースを使用してください。タブを使用する場合。毎回同じ数のタブを使用してください。スペースやタブを混ぜて使用しないでください。 – Drahkar

1

問題はインデントにあります。

の代わりに:

if foo: 
    foobar() 
    elif bar: 
     barbaz() 

それは次のようになります。

固定
if foo: 
    foobar() 
elif bar: 
    barbaz()  

、あなたのコードは、次に注意してください(次のようになり、私は正常に動作するように末尾にあなたのelseをも修正しました):

import random 

secret = random.randint(1, 99) 
guess = 0 
tries = 0 

print "It is a number between 1 and 99. I'll give you six tries. " 

while guess != secret: 
    if tries < 6: 
     guess = input("What's your guess? ") 
     if guess < secret: 
      print "Too low!" 
     elif guess > secret: 
      print "Too high" 
      tries = tries + 1 
     elif guess == secret: 
      print "Correct! You found my secret!" 
    else: 
     print "No more guesses! Better luck next time!" 
     print "The secret number was", secret 
     break 
1

このコードにはいくつかの問題があります。

  1. elifおよびifのインデントレベルは同じでなければなりません。
  2. あまりにも高い場合には、triesだけ増分します。
  3. input()は文字列を返します。それを整数に変換する必要があります。
  4. <>をテストした後、==は冗長です。 <>==カバー以来
  5. すべての場合、あなたはelseに達することは決してないだろう:

ここでは、ロジックの再加工です:

while guess != secret and tries < 6: 
    guess = int(input("What's your guess? ")) 
    if guess < secret: 
     print "Too low!" 
    elif guess > secret: 
     print "Too high" 
    tries = tries + 1 

if guess == secret: 
    print "Correct! You found my secret!" 
else: 
    print "No more guesses! Better luck next time!" 
    print "The secret number was", secret