Вы никогда не устанавливаете для first_player_move значение false в первом цикле (также никогда не устанавливаете для него значение true во втором цикле).
Я рекомендую переместить печать («Это сейчас» + player2_name + "'s повернуть. ") в ваше if и изменив таким образом:
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
else:
print('It is now ' + player2_name + "'s turn.")
first_player_move = False
Сравнимый мод с петлей 2-го игрока.
Я также хотел бы подтвердить ваши условия выигрыша / проигрыша.Они читают ваш код, если кто-то отвечает за создание фрагмента, который содержится в data.txt, а фрагмент больше 3 символов, они проигрывают.Это правильно?
Если это так, есть также небольшая оптимизация, которую вы можете сделать, чтобы уменьшить размер data.txt.Вычеркните все слова, которые состоят из 3 или менее символов, и вы можете удалить ограничение len (word_fragment)>> 3.
Еще одна проблема, с которой вы столкнетесь ... что происходит в случае, когда игрокиполучить доступ к значительному фрагменту и еще ничего не сопоставить в data.txt?
Возможно, вы захотите подумать о создании условия связывания.Например, в конце вашего основного цикла «while True» проверьте длину> самого длинного слова в data.txt и назовите его связующим.
Дальнейшее предложение по стилю.Нет необходимости использовать петли для ходов игрока:
- Держите все это в своем большом цикле "True":
- Подсказка для ввода player1
- Тест на потерю player1 (то есть фрагмент в data.txt)
- Запрос на ввод player2
- Тест на потерю player2
- Тест на длину фрагмента> максимальная длина
- Вернуться к началу цикла
- перерыв при проигрыше игрока или максимальной длине фрагмента
- нет необходимости переключать first_player_move True / False
Бонусные баллы, если вы можетеобойтись только одним куском кода prompt_then_test и переключаться между именами игроков на каждом проходе.