Цикл While не останавливается, даже если переменные совпадают

#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")