Нужна помощь решить задачу по Python "Подарок лепрекона"

Задача №15 "Подарок лепрекона"

Маленький зелёный человечек за добрые дела может отблагодарить скромным серебряным шиллингом, который будет возвращаться к владельцу, а жадине может подарить золотой, который скоро превратится в кусок коры или рассыплется пеплом. Напишите программу для определения подарка от лепрекона.

Формат ввода:

Вводятся строки: добрый, злой или Какой подарок? пока не будет введена пустая строка.

Формат вывода

Считается количество введенных строк разного типа и на вопрос о подарке выводится ответ. Если строк добрый было больше, чем строк злой, и последняя строка добрый, то подарок серебряный шиллинг. Если больше было строк злой и такая же последняя введенная, то подарок – золотой. Если вопрос задан при неопределенном значении подарка, выводится: Ах, не знаю! и программа завершает работу.

После каждого вопроса строки считаются заново.

Пример Ввод:

добрый           
добрый            
добрый 
злой 
добрый 
злой 
добрый 
Какой подарок? 
злой 
добрый 
злой 
злой 
добрый 
Какой подарок? 
добрый 
добрый 

Вывод:

серебряный шиллинг
Ах, не знаю!

написал следующий код:

def f():
    while True:
        good = 0
        bad = 0
        last = ''
        for word in iter(input, ''):
            if word == 'добрый':
                good += 1
                last = 'добрый'
            elif word == 'злой':
                bad += 1
                last = 'злой'
            elif word == 'Какой подарок?':
                if good > bad and last == 'добрый':
                    print('серебряный шиллинг')
                elif bad > good and last == 'злой':
                    print('золотой')
                else:
                    print('Ах, не знаю!')
                good = 0
                bad = 0
                break
        else:
            print('Ах, не знаю!')
            break


f()

но его преподователь не принимает по причине:

Ожидаемый результат

серебряный шиллинг
Ах, не знаю!

Вывод

серебряный шиллинг
Ах, не знаю!
Ах, не знаю!   

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

Автор решения: user580418
def f():
    while True:
        good = 0
        bad = 0
        last = ''
        for word in iter(input, ''):
            if word == 'добрый':
                good += 1
                last = 'добрый'
            elif word == 'злой':
                bad += 1
                last = 'злой'
            elif word == 'Какой подарок?':
                if good > bad and last == 'добрый':
                    print('серебряный шиллинг')
                elif bad > good and last == 'злой':
                    print('золотой')
                else:
                    print('Ах, не знаю!')
                good = 0
                bad = 0
                break
        else:
            break


f()

После выхода из цикла не надо писать что "Ах, не знаю!", потому что у тебя в цикле идет проверка на подарок

→ Ссылка