Циклы Codecademy 8/19

#python #syntax-error

#python #синтаксическая ошибка

Вопрос:

Я давно не программировал, поэтому подумал, что продолжу свой учебник по codecademy, чтобы вернуться в форму. Сейчас я действительно в замешательстве, потому что получаю все эти синтаксические ошибки там, где я уверен, что не должен.

Вот мой код:

 from random import randint

# Generates a number from 1 through 10 inclusive
random_number = randint(1, 10)

guesses_left = 3
# Start your game!
while guesses_left > 0:
    guess = int(raw_input("Your guess: ")
    if guess == random_number:
        print "You win!"
        break
    guesses_left = guesses_left - 1
else:
    print "You lose."
  

Я получаю синтаксическую ошибку из-за двоеточия в строке 10.

Я не понимаю, почему, это оператор if, и после оператора if у вас всегда есть двоеточие, не так ли?

Сегодня я получаю кучу синтаксических ошибок для таких простых вещей, как это, и я не понимаю, почему.

Комментарии:

1. Пожалуйста, опубликуйте фактическую обратную трассировку ошибок!

Ответ №1:

Это прямое копирование / вставка вашего кода? Ваш int() не закрыт

 guess = int(raw_input("Your guess: ")   <--- missing parenthesis
  

Кроме того, уменьшение guesses_left находится в неправильном месте. Вероятно, его следует поместить после else блока, поскольку он должен уменьшаться в каждом цикле, независимо от результата if/else

Кроме того, отступ в вашем else блоке не совпадает с вашим if . Отступ в python является ключевым.

Ответ №2:

Небольшие изменения в вашем коде:

 from random import randint

# Generates a number from 1 through 10 inclusive
random_number = randint(1, 10)

guesses_left = 3
# Start your game!
while guesses_left > 0:
    guesses_left = guesses_left - 1
    guess = int(raw_input("Your guess: "))
    if guess == random_number:
        print "You win!"
        break
else:
        print "You lose."
  

Комментарии:

1. Я думаю, что это должен быть блок while else.. Если я не ошибаюсь, в этом отступе используется if else ..

2. Это пока еще потому, что с вашим кодом, если вы ошибаетесь один раз, он уже говорит вам, что вы проиграли..

3. Также ваша строка guesses_left = guesses_left — 1 находится в неправильном месте. С вашим кодом это позволяет мне угадывать до бесконечности. Я переместил его сразу после строки с помощью raw_input, и это заставляет меня угадывать 3 раза

4. 1) Это не переходит в бесконечность — возможно, это произошло после внесения изменений. 2) Но да, после каждого предположения говорится «Вы проиграли». Я думал, что это то, что вы хотели (я бы поставил «попробуйте еще раз» или что-то подобное, прежде чем вводить «Вы проиграете». 3) Поскольку вы действительно хотели использовать while /else, я соответствующим образом изменил код.

Ответ №3:

Этот код работает и помогает вам пройти. Основная ошибка, которую я получил, заключалась в том, что он работает, но все же сказал, что произошла ошибка после окончания игры. Это было связано с тем, что мой else: print «Вы проиграете». является частью операции while. Вместо этого используйте функцию else: с тем же отступом, что и while: , и это то, что они хотели видеть

 from random import randint

# Generates a number from 1 through 10 inclusive
random_number = randint(1, 10)

guesses_left = 3

while guesses_left > 0:
    guess = int(raw_input("Your guess: "))
    guesses_left -= 1
    if guess == random_number:
        print "You win!"
        break
else:
    print "You lose."
  

Ответ №4:

Вот как я это сделал, я добавил несколько дополнительных функций просто для удовольствия c:

 from random import randint

# Generates a number from 1 through 10 inclusive
random_number = randint(1, 10)

print random_number # For debugging

guesses_left = 3 # Amount of guesses left
print "Guess my number! You've got 3 tries left!"

tries = [] # Array for user input

while guesses_left > 0:
    guess = int(raw_input("Your guess: ")) # Asks user to enter a number

    if guess in tries: # Checks if user entered the same number before
        print "You've already guessed this number: ", guess
        print "You've got " , int(guesses_left) , " guess(es) left!"

    elif guess > 10 or guess < 1: # Checks if user input is between 1 and 10
        print "Wrong input! Guess a number between 1 and 10!"
        print "You've got " , int(guesses_left) , " guess(es) left!"

    elif guess == random_number: # If user input is the same as the random number you win!
        print "You win!"
        break

    else:
        guesses_left -= 1 # Decreases the amount of guesses left
        print "You've got " , int(guesses_left) , " guess(es) left!"
        tries.append(guess) # Saves user input to "tries"
else:

    print "You lose!"