Python

Помогите с инфой плиз. Python

В файле записаны данные о результатах сдачи экзамена. Каждая строка содержит фамилию, имя и количество баллов, разделенные пробелами:
<Фамилия> <Имя> <Количество баллов>
Вывести в другой файл фамилии и имена тех учеников, которые не прошли порог - 40б и надпись "Не пройден порог:"


отдельно как другое задание:
К предыдущей задаче добавить к полученному списку нумерацию, сократить имя до одной буквы и поставить перед фамилией и вывести данные в другой файл
1)
 with open('input.txt', 'r') as fi, open('output1.txt', 'w') as fo: 
f = True
for s in fi:
l = s.split()
if len(l) == 3:
if l[-1].isnumeric() and int(l[-1]) < 40:
if f:
fo.write('Не пройден порог:\n')
f = False
fo.write(l[0] + ' ' + l[1] + '\n')
2)
 with open('input.txt', 'r') as fi, open('output2.txt', 'w') as fo: 
n = 0
for s in fi:
l = s.split()
if len(l) == 3:
if l[-1].isnumeric() and int(l[-1]) < 40:
if not n:
fo.write('Не пройден порог:\n')
n += 1
fo.write(str(n) + ' ' + l[1][0] + ' ' + l[0] + '\n')
Вячеслав Шумкин
Вячеслав Шумкин
72 783
Лучший ответ
Вячеслав Шумкин Немого сократил код (Python 3.8+)
1)
 with open('input.txt', 'r') as fi, open('output1.txt', 'w') as fo: 
f = True
for s in fi:
if len(l := s.split()) == 3 and l[-1].isnumeric() and int(l[-1]) < 40:
if f:
fo.write('Не пройден порог:\n')
f = False
fo.write(l[0] + ' ' + l[1] + '\n')
2)
 with open('input.txt', 'r') as fi, open('output2.txt', 'w') as fo: 
n = 0
for s in fi:
if len(l := s.split()) == 3 and l[-1].isnumeric() and int(l[-1]) < 40:
if not n:
fo.write('Не пройден порог:\n')
n += 1
fo.write(str(n) + ' ' + l[1][0] + ' ' + l[0] + '\n')
Для решения первой задачи можно использовать следующий код:

```python
with open('input.txt', 'r') as f_in, open('output.txt', 'w') as f_out:
for line in f_in:
surname, name, score = line.split()
if int(score) < 40:
f_out.write(f'Не пройден порог: {surname} {name}\n')
```

Для решения второй задачи можно модифицировать код следующим образом:

```python
with open('input.txt', 'r') as f_in, open('output.txt', 'w') as f_out:
for i, line in enumerate(f_in, start=1):
surname, name, score = line.split()
if int(score) < 40:
short_name = name[0]
f_out.write(f'{i}. {short_name}. {surname}\n')
```

Здесь мы добавили переменную `i`, которая отвечает за номер строки, и использовали метод `enumerate()` для ее генерации. Также мы сократили имя до одной буквы и поменяли порядок вывода имени и фамилии.
Лёнька Валиев Можно***** без CHAT GPT, а своей умной головой!??!?!