Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## В 1-4 задачах использовал файл test.txt. В нём были входные данные
- #1)Зачет в олимпиаде проводится без деления на классы. Выведите фамилию и имя победителя олимпиады. Если таких несколько - выведите #только их количество.
- max_score = 0
- winners = []
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- surname, name, _, score = line.split()
- score = int(score)
- if score > max_score:
- max_score = score
- winners = [(surname, name)]
- elif score == max_score:
- winners.append((surname, name))
- if len(winners) == 1:
- print(f"{winners[0][0]} {winners[0][1]}")
- else:
- print(len(winners))
- #2)Зачет проводится отдельно в каждом классе. Победителями олимпиады становятся школьники, которые набрали наибольший балл среди всех #участников в данном классе.
- #Для каждого класса определите максимальный балл, который набрал школьник, не ставший победителем в данном классе.
- from collections import defaultdict
- scores_by_class = defaultdict(list)
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- surname, name, grade, score = line.split()
- scores_by_class[int(grade)].append(int(score))
- second_best_scores = []
- for grade, scores in scores_by_class.items():
- scores.sort(reverse=True)
- max_score = scores[0]
- second_best = -1
- for score in scores[1:]:
- if score != max_score:
- second_best = score
- break
- second_best_scores.append(second_best)
- for score in second_best_scores:
- print(score, end=' ')
- #3)Результаты олимпиады подводятся без деления на классы. Победителем олимпиады становятся те, кто набрал больше всего баллов. #Призерами олимпиады становятся участники, следующие за победителями.
- #Определите наибольший балл, который набрали призеры олимпиады и количество участников олимпиады, набравших такой балл.
- scores = []
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- if line.strip():
- surname, name, _, score = line.split()
- scores.append(int(score))
- scores.sort(reverse=True)
- winner_score = scores[0]
- prizewinner_score = -1
- prizewinner_count = 0
- for score in scores[1:]:
- if score != winner_score:
- prizewinner_score = score
- break
- for score in scores:
- if score == prizewinner_score:
- prizewinner_count += 1
- print(prizewinner_score, prizewinner_count)
- #4)В условиях предыдущей задачи выведите фамилию и имя участника олимпиады, набравшего наибольший балл, но не ставшего победителем. #Если таких школьников несколько - выведите их количество
- participants = []
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- if line.strip():
- surname, name, _, score = line.split()
- participants.append((int(score), surname, name))
- participants.sort(reverse=True)
- winner_score = participants[0][0]
- for score, surname, name in participants[1:]:
- if score != winner_score:
- print(f"{surname} {name}")
- break
- #5)В олимпиаде по информатике принимало участие \(N\) человек. Определите школы, из которых в олимпиаде принимало участие больше всего #участников. В этой задаче необходимо считывать данные построчно, не сохраняя в памяти данные обо всех участниках, а только подсчитывая #число участников для каждой школы.
- from collections import defaultdict
- school_counts = defaultdict(int)
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- if line.strip():
- surname, name, school, score = line.split()
- school_counts[int(school)] += 1
- max_count = max(school_counts.values())
- schools_with_max_count = [school for school, count in school_counts.items() if count == max_count]
- schools_with_max_count.sort()
- for school in schools_with_max_count:
- print(school, end=' ')
- #6)В условиях предыдущей задачи определите школы, из которых в олимпиаде принимало участие меньше всего участников (но был хотя бы один #участник).
- from collections import defaultdict
- school_counts = defaultdict(int)
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- if line.strip(): # Проверка на пустую строку
- surname, name, school, score = line.split()
- school_counts[int(school)] += 1
- min_count = min(school_counts.values())
- schools_with_min_count = [school for school, count in school_counts.items() if count == min_count]
- schools_with_min_count.sort()
- for school in schools_with_min_count:
- print(school, end=' ')
- #7)Известно, что фамилии всех участников — различны. Сохраните в массивах список всех участников и выведите его, отсортировав по #фамилии в лексикографическом порядке.
- #При выводе указываете фамилию, имя участника и его балл.
- participants = []
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- if line.strip():
- surname, name, school, score = line.split()
- participants.append((surname, name, int(score))) # Добавляем кортеж (фамилия, имя, балл)
- participants.sort()
- for surname, name, score in participants:
- print(f"{surname} {name} {score}")
- #8)В условиях предыдущей задачи выведите в порядке возрастания номера школ, в которых есть хотя бы один победитель олимпиады.
- participants = []
- winner_schools = set()
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- if line.strip():
- surname, name, school, score = line.split()
- participants.append((int(score), surname, name, int(school)))
- participants.sort(reverse=True)
- winner_score = participants[0][0]
- for score, surname, name, school in participants:
- if score == winner_score:
- winner_schools.add(school)
- winner_schools = sorted(list(winner_schools))
- for school in winner_schools:
- print(school, end=' ')
- #9)В условиях предыдущей задачи выведите в порядке возрастания номера школ, средний балл учащихся которых выше, чем средний балл всех #участников олимпиады (то есть необходимо вычислить средний балл для каждой школы и средний балл по всем участникам).
- from collections import defaultdict
- school_scores = defaultdict(list)
- total_score = 0
- total_participants = 0
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- if line.strip():
- surname, name, school, score = line.split()
- score = int(score)
- school_scores[int(school)].append(score)
- total_score += score
- total_participants += 1
- average_score = total_score / total_participants
- schools_above_average = []
- for school, scores in school_scores.items():
- school_average = sum(scores) / len(scores)
- if school_average > average_score:
- schools_above_average.append(school)
- schools_above_average.sort()
- for school in schools_above_average:
- print(school, end=' ')
- #10)В условиях предыдущей задачи выведите в порядке возрастания номера школ, из которых наибольшее количество участников стало #победителями олимпиады.
- from collections import defaultdict
- school_winners = defaultdict(int) # Словарь для подсчёта победителей из каждой школы
- participants = []
- with open('test.txt', 'r', encoding='utf-8') as f:
- for line in f:
- if line.strip():
- surname, name, school, score = line.split()
- participants.append((int(score), surname, name, int(school)))
- participants.sort(reverse=True) # Сортировка по баллам в убывающем порядке
- winner_score = participants[0][0] # Балл победителя
- for score, _, _, school in participants:
- if score == winner_score:
- school_winners[school] += 1
- max_winners = max(school_winners.values()) # Находим максимальное число победителей из одной школы
- schools_with_most_winners = [school for school, count in school_winners.items() if count == max_winners]
- schools_with_most_winners.sort()
- for school in schools_with_most_winners:
- print(school, end=' ')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement