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

Рейтинг: 1Ответов: 2Опубликовано: 08.07.2023

в решении следующей задачи нужно закончить ввод чисел (как я понимаю, с помощью control+d)

Входные данные
В каждой строке сначала записан номер класса (число, равное 9, 10 или 11), 
затем (через пробел) — фамилия ученика.

Выходные данные
Необходимо вывести список школьников по классам: сначала всех учеников 9 класса, 
затем — 10, затем — 11. Внутри одного класса порядок
вывода фамилий должен быть таким же, как на входе.
Примеры
входные данные
9 Ivanov
10 Petrov
11 Sidorov
9 Grigoryev
9 Sergeev
10 Yakovlev
выходные данные
9 Ivanov
9 Grigoryev
9 Sergeev
10 Petrov
10 Yakovlev
11 Sidorov

Проблема в том, что я не знаю, как завершить ввод... Мой код:

nine=[]
ten=[]
eleven=[]
while True:
    q=input().split()
    if  ... : #здесь должно быть заканчивающее ввод условие
        break 

    if q[0]=="9":
        nine.append(q)
    elif q[0]=="10":
        ten.append(q) 
    elif q[0]=="11":
        eleven.append(q)
print(*nine, sep="\n") 
print(*ten, sep="\n") 
print(*eleven, sep="\n")

Помогите пожалуйста!!!

Ответы

▲ 3Принят

Просто читайте данные из sys.stdin

>>> import sys
>>> for line in sys.stdin:
...     print(line.split())
...
test test
['test', 'test']
a b
['a', 'b']
^D
>>>

или так, если нужно чтобы вывод начался не раньше, чем закончится ввод

>>> lines = [line.split() for line in sys.stdin]
1 2
3 4 5
x y
^D
>>> print(lines)
[['1', '2'], ['3', '4', '5'], ['x', 'y']]

Ctrl-D в linux или Ctrl-Z,Enter в windows прервут этот цикл

▲ 2

ctrl+d в любом случае завершит исполнение программы, может имелось ввиду ctrl+c?

res=[]
try:
  while x!='':
    x=input('text')
    res.append(x)
except KeyboardInterrupt:
 print('ввод завершён',res)

тут завершится при вводе пустой строки также. Спобос без try

import os
os.system('python3 file2.py')
data=open('file2.txt').read()

содержание file2

x=open('file2.txt','w')

while 1:
 inp=input()
 x.write(inp)
 x.flush()

суть в том чтобы из скрипта питон вызвать другой скрипт питона, который неважно как завершится даже с ctrl+d, но данные сохранит в файл, для этого при каждой итерации и сбрасываем буфер в файл, остаётся лишь прочитать файл, но это не очень хорошо тк пользователь введя последние данные может нажать ктрлД перед энтером, тогда последние данные не будт сохранены. Вариант с вводом пустой строки оптимальнее и вернее.