Python

Срочно помогите с задачей на Python!!!

В некотором файле содержатся детские имена. Каждое имя указано с новой строки. После имени через пробел записано одно целое число - количество названных этим именем детей. Имена в файле перемешаны в случайном порядке.

Напишите программу, которая считает данные из файла и выведет на экран 5 наиболее популярных имен (каждое в отдельной строке). Имя файла подается на вход и заранее не известно. Если указанного файла не существует, необходимо вывести сообщение "Файл не найден".

Пример:
Если в файле находятся следующие строки:
Аня 5
Саша 10
Кирилл 150
Игорь 1
Юля 999
Миша 2
Вы должны вывести имена Юля, Кирилл, Саша, Аня, Миша (в порядке убывания количества, каждое в отдельной строке)
Пж поставьте в ответе отступы)
Максим Ост
Максим Ост
107
 filename = input("Введите имя файла: ") 
try:
with open(filename) as file:
names = {}
for line in file:
name, count = line.strip().split()
names[name] = names.get(name, 0) + int(count)
sorted_names = sorted(names.items(), key=lambda x: x[1], reverse=True)
for name, count in sorted_names[:5]:
print(name)
except FileNotFoundError:
print("Файл не найден")
Эта программа считывает имя файла с помощью функции input(), затем открывает файл с помощью оператора with open. Затем происходит считывание каждой строки, а количество детей для каждого имени добавляется в словарь names.

Затем с помощью функции sorted() сортируется словарь по убыванию количества детей, и выводятся первые 5 имен с наибольшим количеством упоминаний. Если файл не найден, программа выведет сообщение "Файл не найден".
Тёма_Каратист ****
Тёма_Каратист ****
9 372
Лучший ответ
Максим Ост Не подходит(
Дмитрий Овчинников Стоит ещё кодировку обработать - у меня упало, т.к. файл в UTF8 был.
 except UnicodeDecodeError: 
print("Файл в неверной кодировке")
Конечное решение может выглядеть следующим образом:

```
filename := ReadString('Введите имя файла: ');

if not FileExists(filename) then
begin
WriteLn('Файл не найден');
Halt;
end;

var
names: array of string;
counts: array of integer;
i, j, maxIndex: integer;
maxCount: integer = -1;
temp: string;

var
input: TextFile;
begin
AssignFile(input, filename);
Reset(input);

while not EOF(input) do
begin
ReadLn(input, temp);
temp := Trim(temp);

var spaceIndex := Pos(' ', temp);
var name := Copy(temp, 1, spaceIndex - 1);
var countStr := Copy(temp, spaceIndex + 1, Length(temp) - spaceIndex);
var count := StrToIntDef(countStr, 0);

var index := -1;
for i := 0 to High(names) do
begin
if names[i] = name then
begin
index := i;
Break;
end;
end;

if index = -1 then
begin
index := Length(names);
SetLength(names, index + 1);
SetLength(counts, index + 1);
names[index] := name;
counts[index] := 0;
end;

counts[index] := counts[index] + count;
end;

CloseFile(input);

for i := 0 to Min(4, High(names)) do
begin
maxCount := -1;
for j := i to High(names) do
begin
if counts[j] > maxCount then
begin
maxCount := counts[j];
maxIndex := j;
end;
end;
temp := names[i];
names[i] := names[maxIndex];
names[maxIndex] := temp;
counts[maxIndex] := counts[i];
counts[i] := maxCount;
WriteLn(names[i]);
end;
end.
```

Здесь используется динамический массив для хранения имен и соответствующих им количеств, которые считываются из файла. После чтения всех данных производится сортировка массива имен в порядке убывания количества, и выводятся первые 5 имен. Если в файле меньше 5 имен, то будут выведены все, что есть. Если указанный файл не существует, программа выведет сообщение "Файл не найден".
SS
Shohjahon Ss
35 142
Максим Ост Не подходит
Кувандык Ишкулов Ты хоть бы забил в свой gpt что это Python