Программа Python не будет добавлять более одного значения

#python-3.x

#python-3.x

Вопрос:

Всякий раз, когда я пытаюсь добавить (догадки) к переменной all_guesses, она, по-видимому, заменяет существующее значение из предыдущего цикла. Я хочу, чтобы программа записывала все количество догадок игрока за раунд игры, но записывала только самое последнее значение. Я убедился, что переменная не находится в цикле while, чтобы она не перезаписывала ее, так что не так? Я действительно новичок в программировании на Python, поэтому, похоже, я не могу понять это. Каждый раз, когда я запускаю цикл, значения guessed и all_guesses сбрасываются на исходные.

Это фрагмент моей программы:

 def main():
    guesses = 0
    guessed = []
    all_guesses = []
    guess = input('nPlease guess a letter: ').lower()
    letter = 'abcdefghi'
    answer = random.choice(letter)
    
    while len(guess) != 1 or guess not in letter:
        print("nInvalid entry! One alphabet only.")
        guess = input('Please guess a letter: ')
        
    while len(guess) < 2 and guess in letter:
        if guess in guessed:
            guess = input("nYou've already guessed that! Try again: ").lower()
            
        else: 
            if guess == answer:
                guesses = guesses   1
                played = played   1
                print("nCongratulations, that is correct!")
                replay = input('Would you like to play again? Type y/n: ').lower()
                all_guesses.append(guesses)
            
  

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

1. Я сомневаюсь, что этот код вообще будет работать. Что played , например?

2. Я не публиковал полный код, так как он слишком длинный. Если вы попытаетесь запустить предоставленный мной код, это определенно не сработает. Played представляет собой сыгранные раунды, но я не показывал эту часть программы.

Ответ №1:

Короткий ответ будет заключаться в том, что all_guesses он должен быть глобальным, определенным вне main , и логика воспроизведения также должна быть обернута вокруг main .

Кажется, вам не хватает логики, поскольку вы никогда не изменяете guessed , но ожидаете найти там что-то. И в коде есть тупики и другие недостающие части. Насколько я могу догадаться, это примерно то, что вы пытаетесь сделать:

 from random import choice
from string import ascii_lowercase as LETTERS

all_guesses = []

def main():
    guessed = []
    answer = choice(LETTERS)

    guess = input('nPlease guess a letter: ').lower()

    while len(guess) != 1 or guess not in LETTERS:
        print("nInvalid entry! One alphabet only.")
        guess = input('Please guess a letter: ').lower()

    while len(guess) == 1 and guess in LETTERS:
        if guess in guessed:
            guess = input("nYou've already guessed that! Try again: ").lower()
            continue

        guessed.append(guess)

        if guess == answer:
            print("nCongratulations, that is correct!")
            break

        guess = input("nIt's not that letter. Try again: ").lower()

    all_guesses.append(len(guessed))

while True:
    main()

    replay = input('Would you like to play again? Type y/n: ').lower()

    if replay == 'n':
        break

print(all_guesses)
  

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

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