Как поставить input внутрь функии

Не могу вызвать input() внутри функции. Я пыталась найти ответы в других источниках, но нашла только этот код

def example():
    while True:
        test4word = input("What's your name? ")

        try:
            test4num = int(input("From 1 to 7, how many hours do you play in your mobile?" ))
        except ValueError:
            print("Error! This is not a number. Try again.")
        else:
            print("Impressive, ", test4word, "! You spent", test4num*60, "minutes or", test4num*60*60, "seconds in your mobile!")
            break
example()

Но при запуске выдает ошибку:

EOF when reading a line

Помогите решить проблему


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

Автор решения: Alex

EOF расшифровывается End OF File - Конец файла

Код правильный, но возможно вы случайно прервали операцию клавишами ctrl + d или ctrl + c

Попробуйте добавить в код пару строчек

def example():
    while True:
        test4word = input("What's your name? ")

        try:
            test4num = int(input("From 1 to 7, how many hours do you play in your mobile?" ))
        except ValueError:
            print("Error! This is not a number. Try again.")
        except EOFError:
            print('Ну зачем вы сделали мне EOF?')
        except KeyboardInterrupt:
            print('\nВы отменили операцию.')
        else:
            print("Impressive, ", test4word, "! You spent", test4num*60, "minutes or", test4num*60*60, "seconds in your mobile!")
            break
example()

Пример взял с легендарной книги. Вот статья

→ Ссылка
Автор решения: MarianD

Для меня ваш код работает правильно, нет никаких ошибок.

Ошибка в коде

EOF when reading a line

бы просто значила, что вы что-то начали - (, [, {, " или ', но не окончили — отсутствует ), ], }, " или '.


Но ваша проблема вероятно в другом:

Вы запускаете программу — никаких ошибок нету (в противоречии с тем, что вы в своем вопросе писали), но ваш цикл бесконечный, он хочет имя, имя, имя, ...

В отчаянии нажимаете что-то как Ctrl+D или Ctrl+Z и ваша программа кричит:

Я хотела читать строку от пользователя, а напала на конец файла.

Для стандартного ввода нажатие Ctrl+D (или Ctrl+Z — в зависимости от операционной системы и окружения) генерирует признак конца файла (EOF — end of file).

Как это обойти, в моем другом ответе.

→ Ссылка
Автор решения: MarianD

Вы написали функцию, в которой бесконечный цикл с вызовом функции input():

def example():
    while True:
        test4word = input("What's your name? ")
        # Продолжение функции ...

Когда вы вызовете эту функцию

example()

она будет бесконечно спрашивать имя (на английском).

Это не хорошо — надо дать пользователю возможность каким-то образом сказать, что хватит, он уже не хочет отвечать. Например так:

def example():
    while True:
        test4word = input("What's your name? ")
        if not test4word:                        # когда test4word пустым,
            break                                # выход из цикла «while True:»
        # Продолжение функции ...

Когда пользователь ничего не написал, только он нажал на клавишу Enter, бесконечный цикл прерывается.

→ Ссылка