2011-12-23 5 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 

Edit: Я знаю, что есть еще ошибки в этом, такие как tries = tries + 1, который должен быть где-то в коде. Но эта версия, по крайней мере, не дает синтаксических ошибок.

+0

Феликс ударил его прямо на деньги. Также убедитесь, что все, что вы отступаете, является последовательным. Если вы используете пробелы, используйте одно и то же количество пробелов каждый раз. Если вы используете вкладки. Используйте одинаковое количество вкладок каждый раз. Никогда не смешивайте пространства и вкладки, так как это вызовет проблемы. – Drahkar

1

Проблема заключается в вашем углублении.

Вместо:

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

Оно должно быть:

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

Fixed, ваш код будет выглядеть следующим образом (обратите внимание, я также фиксированной ваш 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 
Смежные вопросы