Python - Выбор ответа пользователя, да, нет, ответ некорректный

Всем доброго дня! Столкнулся с неочевидной (для меня) проблемой работы цикла. Программа после своей первой итерации спрашивает пользователя, играем еще раз или нет. Возможные ответы "д" и "н", если же пользователь ввел другой символ, запрос еще раз. При первом выборе все ок, и "д" и "н" отрабатывают. Но если выбрать сначала "д", пройти еще одну работу программы, и после выбрать "н", то программа просит ввести "н" еще несколько раз... Загадка

from random import *
answers = ["Да", "Нет"]

def new_game():
    flag = True
    while True:
        request = input('Хотите сыграть еще раз? "д" - да, "н" - нет: ')
        if request == "н":
            print('Пока-пока!')
            break
        elif request == "д":
            magicball()
        else:
            print('Не понял вашего ответа')

def magicball():
    while True:
        question = input(f"Задай же свой вопрос: ")
        answer = choice(answers)
        print(f"Мой ответ тебе: {answer}!")
        new_game()
        break
magicball()

Ответы (3 шт):

Автор решения: Павел

Проблема в том, что вы вызываете ещё одну функцию magicball(), при этом ту, которую запускаете изначально - не завершаете, поэтому после выбора варианта "нет" условие выхода не срабатывает и она продолжает работать по while True:

Если отталкиваться конкретно от вашего кода, то самый простой вариант исправления:

elif request == "д":
    magicball()
    break
→ Ссылка
Автор решения: Mango

ошибка была из за цикла while True, он тут не нужен

from random import *
answers = ["Да", "Нет"]

def new_game():
    flag = True
    request = input('Хотите сыграть еще раз? "д" - да, "н" - нет: ')
    if request == "н":
        print('Пока-пока!')
    elif request == "д":
        magicball()
    else:
        print('Не понял вашего ответа, попробуйте ввести еще раз')
        new_game()
def magicball():
    question = input(f"Задай же свой вопрос: ")
    answer = choice(answers)
    print(f"Мой ответ тебе: {answer}!")
    new_game()
magicball()
→ Ссылка
Автор решения: Енот

Это конечно круто,но я чутка упростил код,пробуйте

import random
import time

def answer():
    text = ['Да', 'Нет']
    answer = input('Задавайте ваш вопрос:')
    random_text = random.choice(text)
    print('Я думаю что...')
    time.sleep(2)
    print(random_text)
    
while True:
    b = input('Хотите задать вопрос?(Да/Нет)')

    if b == 'Да':
        answer()
    elif b == 'Нет':
        print('Пока!')
        break
    else:
        print('Не особо понял о чем Вы,напишите Да/Нет(с большими буквами)')
→ Ссылка