В некотором файле содержатся детские имена. Каждое имя указано с новой строки. После имени через пробел записано одно целое число - количество названных этим именем детей. Имена в файле перемешаны в случайном порядке.
Напишите программу, которая считает данные из файла и выведет на экран 5 наиболее популярных имен (каждое в отдельной строке). Имя файла подается на вход и заранее не известно. Если указанного файла не существует, необходимо вывести сообщение "Файл не найден".
Пример:
Если в файле находятся следующие строки:
Аня 5
Саша 10
Кирилл 150
Игорь 1
Юля 999
Миша 2
Вы должны вывести имена Юля, Кирилл, Саша, Аня, Миша (в порядке убывания количества, каждое в отдельной строке)
Пж поставьте в ответе отступы)
Python
Затем с помощью функции sorted() сортируется словарь по убыванию количества детей, и выводятся первые 5 имен с наибольшим количеством упоминаний. Если файл не найден, программа выведет сообщение "Файл не найден".
Срочно помогите с задачей на Python!!!
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 имен с наибольшим количеством упоминаний. Если файл не найден, программа выведет сообщение "Файл не найден".
Максим Ост
Не подходит(
Дмитрий Овчинников
Стоит ещё кодировку обработать - у меня упало, т.к. файл в UTF8 был.
Конечное решение может выглядеть следующим образом:
```
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 имен, то будут выведены все, что есть. Если указанный файл не существует, программа выведет сообщение "Файл не найден".
```
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 имен, то будут выведены все, что есть. Если указанный файл не существует, программа выведет сообщение "Файл не найден".
Максим Ост
Не подходит
Кувандык Ишкулов
Ты хоть бы забил в свой gpt что это Python
Похожие вопросы
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- Пожалуйста, помогите решить задачу на Python. Упражнение 124, 125, 146
- Помогите пожалуйста задачей по Python.
- Можете помочь с задачей на Python.
- Помогите решить задачу на python!
- Помогите решить задачу на Python.
- Помогите с задачей по Python. Одно задание осталось, что-то не получается.
- Помогите решить задачу на Python
- Помогите решить задачу на Python