от
Я пытаюсь использовать цикл while для чередования поворотов между двумя пользователями, но мой код застревает в цикле «while first_player_move равно True:». Как я могу это исправить, чтобы мой цикл проходил по ходам обоих игроков? Я попытался добавить «продолжить» и «разбить» в разных местах и попытался переключить логические значения вверх, но, похоже, ничего не работает.
word_fragment = ''
        first_player_move = True
        while True:
            while first_player_move is True:
                added_letter = input('Which single letter would you like to add to the fragment? ')
                word_fragment  = added_letter
                print('The current word fragment is: '   word_fragment)
                print('It is now '   player2_name   "'s turn.")
                if word_fragment in open('data.txt').read() and len(word_fragment) > 3:
                    print('I am sorry, you just lost. '   player2_name   ' is the winner!')
                    # call a function to end the game
                    break

            while first_player_move is False:
                added_letter = input('Which single letter would you like to add to the fragment? ')
                word_fragment  = added_letter
                print('The current word fragment is: '   word_fragment)
                print('It is now '   player1_name   "'s turn.")
                if word_fragment in open('data.txt').read() and len(word_fragment) > 3 :
                    print('I am sorry, you just lost. '   player1_name   ' is the winner!')
                    # call a function to end the game
                    break
Я ожидаю, что выходные данные будут проходить через ход каждого игрока и в конечном итоге вывести: «Теперь настала очередь следующего игрока», но вместо этого он продолжает печатать то же имя для следующего хода игроков, что говорит мне о том, что код застрял первый из двух циклов while.              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

3 Ответы

0 голосов
от
Вы никогда не устанавливаете first_player_move в false в первом цикле (также никогда не устанавливаете его в true во втором цикле). Я рекомендую переместить принт («Сейчас» player2_name «Ход».) В ваш if и изменить таким образом:
if word_fragment in open('data.txt').read() and len(word_fragment)
0 голосов
от
Поскольку
first_player_move
не меняется на
false
, когда внутренний цикл заканчивается, внешний запускает новый цикл и снова вызывает внутренний. Последовательный поток: Введите первый цикл =>
True
# так верно Введите внутренний цикл =>
first_player_move
is
True
# так верно Выполните внутренний блок, затем
breaks
и перейдите к первому циклу и повторите шаги, описанные выше. Введите первый цикл =>
True
# так верно Введите внутренний цикл =>
first_player_move
is
True
# так верно     
0 голосов
от
Следующий подход может работать лучше. Цель состоит в том, чтобы попытаться избежать повторения кода и вместо этого использовать переменные, чтобы помочь:
word_fragment = ''
first_player_move = True

while True:
    player_name = player1_name if first_player_move else player2_name
    print(f"It is now {player_name}'s turn.")

    added_letter = input(f'{player_name}: Which single letter would you like to add to the fragment? ')
    word_fragment  = added_letter

    print('The current word fragment is: ', word_fragment)

    if word_fragment in open('data.txt').read() and len(word_fragment)
...