Проблема с программой на python
Решил написать небольшую текстовую игру для тренировки, но возникла проблема. Когда я запускаю программу, всё вроде бы работает, но в какой-то момент программа (как я понимаю) уходит в бесконечный цикл. Можете ли объяснить, в чём моя ошибка? 
import random as r
patience_of_the_people = 0
eurasia = True
ost = False
def print_patience():
print('На данный момент терпение народа составляет {0}!'.format(patience_of_the_people))
def what_q():
global patience_of_the_people
global eurasia
global ost
q = ['С кем война?', 'С кем мир?']
choice_q = r.choice(q)
print('Сейчас у тебя команда:', choice_q)
while True:
if choice_q == 'С кем война?':
u_choice = input().lower()
if (u_choice == 'евразия' and eurasia) or (u_choice == 'остазия' and ost):
patience_of_the_people += 1
print('Вы правы! Репутация правительства в народе увеличилась!')
print_patience()
break
else:
patience_of_the_people -= 1
print('Вы неправы! Репутация правительства в народе уменьшилась!')
break
elif choice_q == 'С кем мир?':
u_choice = input().lower()
if (u_choice == 'евразия' and not eurasia) or (u_choice == 'остазия' and not ost):
patience_of_the_people += 1
print('Вы правы! Репутация правительства в народе увеличилась!')
print_patience()
break
else:
patience_of_the_people -= 1
print('Вы неправы! Репутация правительства в народе уменьшилась!')
break
def replacement():
global patience_of_the_people
global eurasia
global ost
while True:
u_choice2 = input().lower()
if u_choice2 == 'заменить':
patience_of_the_people -= 2
eurasia, ost = ost, eurasia
print('Вы выполнили указания правительства, однако народ недоволен из-за новой войны...')
print_patience()
break
else:
continue
def propaganda():
global patience_of_the_people
while True:
u_choice3 = input().lower()
if u_choice3 == 'организовать':
patience_of_the_people += 1
print('Пропаганда сработала на ура!')
print_patience()
break
else:
continue
def in_game(inPatience):
global patience_of_the_people
patience_of_the_people = inPatience
print('Добро пожаловать в текстовый квест, посвящённый произведению Джорджа Оруэла «1984»!')
print('Именно отсюда начинается твоя работа в Минитерстве Правды. Удачи!')
print('По стандарту война с Евразией и мир с Остазией')
print_patience()
def loop_for_game():
situation = r.randint(0, 10)
if situation == 1:
what_q()
elif situation == 2:
replacement()
elif situation == 3:
propaganda()
else:
input('Вы сидите в своём кабинете в полном уединении...')
in_game(10)
while True:
loop_for_game()
if patience_of_the_people <= 0:
if input('Восстание населения Океании завершило тоталитарный режим. Хотите попробовать ещё раз? (да/нет) :').lower() == 'да':
in_game(10)
else:
break
Ответы (2 шт):
чуть-чуть подправил ваш код чтобы было понятно, что происходит:
в общем в функциях replacement и propaganda требуется ввод команд, но не отображается никакая информация до ввода - гадай, что происходит
а "зацикливания" происходят потому что у вас
situation = r.randint(0, 10)
и только на 3 из них срабатывает вызов функций с вопросами или командами, т.е. 70% циклов ничего не происходит, это и можно принять за зацикливание
import random as r
patience_of_the_people = 0
eurasia = True
ost = False
def print_patience():
print(f'На данный момент терпение народа составляет {patience_of_the_people}!')
def what_q():
global patience_of_the_people
global eurasia
global ost
q = ['С кем война?', 'С кем мир?']
choice_q = r.choice(q)
print('Сейчас у тебя команда:', choice_q)
if choice_q == 'С кем война?':
u_choice = input().lower()
if (u_choice == 'евразия' and eurasia) or (u_choice == 'остазия' and ost):
patience_of_the_people += 1
print('Вы правы! Репутация правительства в народе увеличилась!')
print_patience()
else:
patience_of_the_people -= 1
print('Вы неправы! Репутация правительства в народе уменьшилась!')
elif choice_q == 'С кем мир?':
u_choice = input().lower()
if (u_choice == 'евразия' and not eurasia) or (u_choice == 'остазия' and not ost):
patience_of_the_people += 1
print('Вы правы! Репутация правительства в народе увеличилась!')
print_patience()
else:
patience_of_the_people -= 1
print('Вы неправы! Репутация правительства в народе уменьшилась!')
def replacement():
global patience_of_the_people
global eurasia
global ost
while True:
u_choice2 = input('<заменить> ').lower()
if u_choice2 == 'заменить':
patience_of_the_people -= 2
eurasia, ost = ost, eurasia
print('Вы выполнили указания правительства, однако народ недоволен из-за новой войны...')
print_patience()
break
def propaganda():
global patience_of_the_people
while True:
u_choice3 = input('<пропаганда> ').lower()
if u_choice3 == 'организовать':
patience_of_the_people += 1
print('Пропаганда сработала на ура!')
print_patience()
break
def in_game(inPatience):
global patience_of_the_people
patience_of_the_people = inPatience
print('Добро пожаловать в текстовый квест, посвящённый произведению Джорджа Оруэла «1984»!')
print('Именно отсюда начинается твоя работа в Минитерстве Правды. Удачи!')
print('По стандарту война с Евразией и мир с Остазией')
print_patience()
def loop_for_game():
situation = r.randint(0, 10)
print(situation)
if situation == 1:
what_q()
elif situation == 2:
replacement()
elif situation == 3:
propaganda()
else:
input('Вы сидите в своём кабинете в полном уединении...')
in_game(10)
while True:
loop_for_game()
if patience_of_the_people <= 0:
if input('Восстание населения Океании завершило тоталитарный режим. Хотите попробовать ещё раз? (да/нет) :').lower() == 'да':
in_game(10)
else:
break
у вас не идет цикл, у вас просто не попадается значение 1, 2 или 3
def loop_for_game():
situation = r.randint(0, 10)
if situation == 1:
what_q()
elif situation == 2:
replacement()
elif situation == 3:
propaganda()
else:
input('Вы сидите в своём кабинете в полном уединении...')
попробуйте изменить значение
situation = r.randint(0, 10)
на
situation = r.randint(0, 3)
таким образом, у вас не должно быть длинных циклом, возможно будут пролеты, из 'Вы сидите в своём кабинете в полном уединении...' несколько раз подряд, но это нормально, вы просто проклацайте их через enter, надеюсь я смог вам помочь =)