Как в python прервать input
Перейти к содержимому

Как в python прервать input

  • автор:

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Как прервать input() ?

#1 Март 9, 2009 19:47:12

Serruf От: Зарегистрирован: 2009-03-03 Сообщения: 2 Репутация: 0 Профиль Отправить e-mail

Как прервать input() ?

Можно ли программно завершить ввод input(), например из другого потока?
Пробовал писать в консоль ескейп-последовательности, не срабатывает 🙁
win Py3k

Как остановить input() в Python?

В главном меню находится input() для ввода команды, который ожидает ввода всё время. В какой-то момент может понадобиться принять сигнал из постороннего потока и вывести на экран. Но так как работает input , пока он не получит ввод, ничего не выведется. Я находил вариант решения:

import fileinput for line in fileinput.input(): # Code 

Это бы помогло, но в этот input нельзя ввести текст (как input(‘>>> ‘) ). Есть ли возможность сделать подобное?

Отслеживать
задан 7 ноя 2022 в 18:22
241 1 1 серебряный знак 11 11 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Решение нужно искать не в том, как остановить ввод с клавиатуры, а в многопоточности. Задачи ожидания сигнала и ввода с клавиатуры нужно реализовать в разных потоках.

Если же они как-то связаны, то нужно не ждать ввода, а в цикле проверять наличие символов во входном буфере.

Отслеживать
ответ дан 7 ноя 2022 в 18:30
3,301 2 2 золотых знака 3 3 серебряных знака 15 15 бронзовых знаков

Дело в том, что у меня они, как раз таки, и находятся в отдельных потоках. Но когда в любой части кода встречается input , то любой остальной код приостанавливается до ввода. Можно поподробнее про «проверять наличие символов во входном буфере»?

8 ноя 2022 в 15:43

Окей, проблема была в работе IDLE, в которой я проверяю код резких от ошибок. В консоли всё нормально.

Как закончить ввод чисел

Всем здравствуйте! Хотел бы попросить помощь.
Пытаюсь сделать задание которое звучит так:
Напишите программу с циклом, который просит пользователя ввести ряд целых чисел. Пользователь должен нажать кнопку end-of-file (Control-Z или Control-D, в зависимости от операционной системы), чтобы просигнализировать об окончании серии. После того, как все числа были введены, программа должна вывести их сумму. Если
пользователь вводит что-то недопустимое (например, не целое число), программа должна вывести сообщение об ошибке, вывести сумму и затем завершить работу.
Пока что все что у меня получилось это:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def main(): number = 0 sum = 0 while True: listnum = input('Input numbers or press Enter to quit and get total sum: ') if listnum == '': break try: number = number + 1 sum = sum + int(listnum) except: number = number - 1 print('Error') continue print('The total of input is:',sum) main()

По сути нечего не получилось но все же.
Проблема в том что я не понимаю как мне сделать так что бы ввод чисел пользователем заканчивался при нажатии Ctrl+Z или Ctrl+D.
Я буду очень благодарен если кто не будь мне объяснит или лучше напишет какой не будь маленький пример потому что я перелопатил пол интернета и так и не смог найти как же мне это сделать.Прошу помогите.

break, continue, pass#

В Python есть несколько операторов, которые позволяют менять поведение циклов по умолчанию.

Оператор break#

Оператор break позволяет досрочно прервать цикл:

  • break прерывает текущий цикл и продолжает выполнение следующих выражений
  • если используется несколько вложенных циклов, break прерывает внутренний цикл и продолжает выполнять выражения, следующие за блоком * break может использоваться в циклах for и while

Пример с циклом for:

In [1]: for num in range(10): . : if num  7: . : print(num) . : else: . : break . : 0 1 2 3 4 5 6 

Пример с циклом while:

In [2]: i = 0 In [3]: while i  10: . : if i == 5: . : break . : else: . : print(i) . : i += 1 . : 0 1 2 3 4 

Использование break в примере с запросом пароля (файл check_password_with_while_break.py):

username = input('Введите имя пользователя: ') password = input('Введите пароль: ') while True: if len(password)  8: print('Пароль слишком короткий\n') elif username in password: print('Пароль содержит имя пользователя\n') else: print('Пароль для пользователя <> установлен'.format(username)) # завершает цикл while break password = input('Введите пароль еще раз: ') 

Теперь можно не повторять строку password = input(‘Введите пароль еще раз: ‘) в каждом ответвлении, достаточно перенести ее в конец цикла.

И, как только будет введен правильный пароль, break выведет программу из цикла while.

Оператор continue#

Оператор continue возвращает управление в начало цикла. То есть, continue позволяет «перепрыгнуть» оставшиеся выражения в цикле и перейти к следующей итерации.

Пример с циклом for:

In [4]: for num in range(5): . : if num == 3: . : continue . : else: . : print(num) . : 0 1 2 4 

Пример с циклом while:

In [5]: i = 0 In [6]: while i  6: . : i += 1 . : if i == 3: . : print("Пропускаем 3") . : continue . : print("Это никто не увидит") . : else: . : print("Текущее значение: ", i) . : Текущее значение: 1 Текущее значение: 2 Пропускаем 3 Текущее значение: 4 Текущее значение: 5 Текущее значение: 6 

Использование continue в примере с запросом пароля (файл check_password_with_while_continue.py):

username = input('Введите имя пользователя: ') password = input('Введите пароль: ') password_correct = False while not password_correct: if len(password)  8: print('Пароль слишком короткий\n') elif username in password: print('Пароль содержит имя пользователя\n') else: print('Пароль для пользователя <> установлен'.format(username)) password_correct = True continue password = input('Введите пароль еще раз: ') 

Тут выход из цикла выполнятся с помощью проверки флага password_correct. Когда был введен правильный пароль, флаг выставляется равным True, и с помощью continue выполняется переход в начало цикла, перескочив последнюю строку с запросом пароля.

Результат выполнения будет таким:

$ python check_password_with_while_continue.py Введите имя пользователя: nata Введите пароль: nata12 Пароль слишком короткий Введите пароль еще раз: natalksdjflsdjf Пароль содержит имя пользователя Введите пароль еще раз: asdfsujljhdflaskjdfh Пароль для пользователя nata установлен

Оператор pass#

Оператор pass ничего не делает. Фактически, это такая заглушка для объектов.

Например, pass может помочь в ситуации, когда нужно прописать структуру скрипта. Его можно ставить в циклах, функциях, классах. И это не будет влиять на исполнение кода.

Пример использования pass:

In [6]: for num in range(5): . : if num  3: . : pass . : else: . : print(num) . : 3 4 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *