#python
#python
Вопрос:
Проблема в том, что цикл не останавливается, даже если входные данные совпадают с целым secret_word
числом, и я попытался преобразовать его в целое число.
import random
a = [*range(0, 21)]
secret_word = random.choice(a)
print(secret_word)
guess_count = 0
guess_limit = 5
out_of_guesses = False
guess = ""
while guess != secret_word and not out_of_guesses:
if guess_count < guess_limit:
guess = input("Vilket nummer väljer du 0 - 20 ")
guess_count = 1
try:
int(guess)
except ValueError:
print("Ett fucing number dumbass")
else:
out_of_guesses = True
if out_of_guesses:
print("Inga fler gissningar")
else:
print("DAMN DU VANN")
Комментарии:
1.
a = [*range(0, 21)]
это сбивающий с толку способ сказатьa = list(range(21))
2. хорошим инструментом для освоения является отладчик или некоторые операторы печати, которые показывают значение переменных
Ответ №1:
Вы правильно определили, что цикл не останавливается, потому guess
что является строкой и secret_word
является целым числом, так что guess != secret_word
это всегда верно, и попытался преобразовать guess
в целое число.
Но int(guess)
не изменяет значение guess
, оно создает новое значение.
Если вы хотите изменить guess
это новое значение, вам нужно его переназначить:
guess = int(guess)
Ответ №2:
Короткий ответ:
Измените int(guess)
на guess = int(guess)
.
Длинный ответ:
Похоже, что в строке, которую вы использовали int(guess)
, вы предположили, что это изменит значение guess
на проанализированное значение int . Дело в том, что int()
это функция, которая возвращает проанализированное значение, и это не изменит значение, сохраненное в guess
. Поэтому, если вам нужно повторно присвоить возвращаемое значение int guess
после его вызова int()
.
Ответ №3:
Входные данные принимаются как строка, а не целое число. Просто сделайте :
guess = int(input("Vilket nummer väljer du 0 - 20 "))
Редактировать: переместите его также в цикл try.
try:
guess = int(input("Vilket nummer väljer du 0 - 20 "))
guess_count = 1
except ValueError:
print("Ett fucing number dumbass")
Комментарии:
1. Спасибо, это сработало, но если пользователь вводит букву, программа прерывается, есть ли какой-нибудь способ, которым я могу сделать так, чтобы этого не произошло?
2. Просто переместите код в цикл try. Я отредактировал свой ответ.
Ответ №4:
Вы можете немного реорганизовать программу. Чем меньше переменных, тем меньше вероятность ошибок.
import random
secret_word = random.choice(range(21))
print(secret_word)
guess_count = 5
while guess_count > 0:
try:
guess = int(input("Vilket nummer väljer du 0 - 20 "))
if guess == secret_word:
break
except ValueError:
print("Ett fucing number dumbass")
guess_count -= 1
if guess_count == 0:
print("Inga fler gissningar")
else:
print("DAMN DU VANN")