Advertisement
JmihPodvalbniy

Untitled

May 8th, 2024 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.86 KB | Software | 0 0
  1. ## В 1-4 задачах использовал файл test.txt. В нём были входные данные
  2.  
  3.  
  4. #1)Зачет в олимпиаде проводится без деления на классы. Выведите фамилию и имя победителя олимпиады. Если таких несколько - выведите #только их количество.
  5. max_score = 0
  6. winners = []
  7.  
  8. with open('test.txt', 'r', encoding='utf-8') as f:
  9.     for line in f:
  10.         surname, name, _, score = line.split()
  11.         score = int(score)
  12.  
  13.         if score > max_score:
  14.             max_score = score
  15.             winners = [(surname, name)]
  16.         elif score == max_score:
  17.             winners.append((surname, name))
  18.  
  19. if len(winners) == 1:
  20.     print(f"{winners[0][0]} {winners[0][1]}")
  21. else:
  22.     print(len(winners))
  23. #2)Зачет проводится отдельно в каждом классе. Победителями олимпиады становятся школьники, которые набрали наибольший балл среди всех #участников в данном классе.
  24. #Для каждого класса определите максимальный балл, который набрал школьник, не ставший победителем в данном классе.
  25. from collections import defaultdict
  26.  
  27. scores_by_class = defaultdict(list)
  28.  
  29. with open('test.txt', 'r', encoding='utf-8') as f:
  30.     for line in f:
  31.         surname, name, grade, score = line.split()
  32.         scores_by_class[int(grade)].append(int(score))
  33.  
  34. second_best_scores = []
  35.  
  36. for grade, scores in scores_by_class.items():
  37.     scores.sort(reverse=True)
  38.     max_score = scores[0]
  39.     second_best = -1
  40.     for score in scores[1:]:
  41.         if score != max_score:
  42.             second_best = score
  43.             break
  44.     second_best_scores.append(second_best)
  45.  
  46. for score in second_best_scores:
  47.     print(score, end=' ')
  48. #3)Результаты олимпиады подводятся без деления на классы. Победителем олимпиады становятся те, кто набрал больше всего баллов. #Призерами олимпиады становятся участники, следующие за победителями.
  49. #Определите наибольший балл, который набрали призеры олимпиады и количество участников олимпиады, набравших такой балл.
  50. scores = []
  51.  
  52. with open('test.txt', 'r', encoding='utf-8') as f:
  53.     for line in f:
  54.         if line.strip():
  55.             surname, name, _, score = line.split()
  56.             scores.append(int(score))
  57.  
  58. scores.sort(reverse=True)
  59. winner_score = scores[0]
  60.  
  61. prizewinner_score = -1
  62. prizewinner_count = 0
  63.  
  64. for score in scores[1:]:
  65.     if score != winner_score:
  66.         prizewinner_score = score
  67.         break
  68.  
  69. for score in scores:
  70.     if score == prizewinner_score:
  71.         prizewinner_count += 1
  72.  
  73. print(prizewinner_score, prizewinner_count)
  74. #4)В условиях предыдущей задачи выведите фамилию и имя участника олимпиады, набравшего наибольший балл, но не ставшего победителем. #Если таких школьников несколько - выведите их количество
  75. participants = []
  76.  
  77. with open('test.txt', 'r', encoding='utf-8') as f:
  78.     for line in f:
  79.         if line.strip():
  80.             surname, name, _, score = line.split()
  81.             participants.append((int(score), surname, name))
  82.  
  83. participants.sort(reverse=True)
  84. winner_score = participants[0][0]
  85.  
  86. for score, surname, name in participants[1:]:
  87.     if score != winner_score:
  88.         print(f"{surname} {name}")
  89.         break
  90. #5)В олимпиаде по информатике принимало участие \(N\) человек. Определите школы, из которых в олимпиаде принимало участие больше всего #участников. В этой задаче необходимо считывать данные построчно, не сохраняя в памяти данные обо всех участниках, а только подсчитывая #число участников для каждой школы.
  91. from collections import defaultdict
  92.  
  93. school_counts = defaultdict(int)
  94.  
  95. with open('test.txt', 'r', encoding='utf-8') as f:
  96.     for line in f:
  97.         if line.strip():
  98.             surname, name, school, score = line.split()
  99.             school_counts[int(school)] += 1
  100.  
  101. max_count = max(school_counts.values())
  102. schools_with_max_count = [school for school, count in school_counts.items() if count == max_count]
  103. schools_with_max_count.sort()
  104.  
  105. for school in schools_with_max_count:
  106.     print(school, end=' ')
  107. #6)В условиях предыдущей задачи определите школы, из которых в олимпиаде принимало участие меньше всего участников (но был хотя бы один #участник).
  108. from collections import defaultdict
  109.  
  110. school_counts = defaultdict(int)
  111.  
  112. with open('test.txt', 'r', encoding='utf-8') as f:
  113.     for line in f:
  114.         if line.strip():  # Проверка на пустую строку
  115.             surname, name, school, score = line.split()
  116.             school_counts[int(school)] += 1
  117.  
  118. min_count = min(school_counts.values())
  119. schools_with_min_count = [school for school, count in school_counts.items() if count == min_count]
  120. schools_with_min_count.sort()
  121.  
  122. for school in schools_with_min_count:
  123.     print(school, end=' ')
  124. #7)Известно, что фамилии всех участников — различны. Сохраните в массивах список всех участников и выведите его, отсортировав по #фамилии в лексикографическом порядке.
  125. #При выводе указываете фамилию, имя участника и его балл.
  126. participants = []
  127.  
  128. with open('test.txt', 'r', encoding='utf-8') as f:
  129.     for line in f:
  130.         if line.strip():
  131.             surname, name, school, score = line.split()
  132.             participants.append((surname, name, int(score)))  # Добавляем кортеж (фамилия, имя, балл)
  133.  
  134. participants.sort()
  135.  
  136. for surname, name, score in participants:
  137.     print(f"{surname} {name} {score}")
  138. #8)В условиях предыдущей задачи выведите в порядке возрастания номера школ, в которых есть хотя бы один победитель олимпиады.
  139. participants = []
  140. winner_schools = set()
  141.  
  142. with open('test.txt', 'r', encoding='utf-8') as f:
  143.     for line in f:
  144.         if line.strip():
  145.             surname, name, school, score = line.split()
  146.             participants.append((int(score), surname, name, int(school)))
  147.  
  148. participants.sort(reverse=True)
  149. winner_score = participants[0][0]
  150.  
  151. for score, surname, name, school in participants:
  152.     if score == winner_score:
  153.         winner_schools.add(school)
  154.  
  155. winner_schools = sorted(list(winner_schools))
  156.  
  157. for school in winner_schools:
  158.     print(school, end=' ')
  159.  
  160. #9)В условиях предыдущей задачи выведите в порядке возрастания номера школ, средний балл учащихся которых выше, чем средний балл всех #участников олимпиады (то есть необходимо вычислить средний балл для каждой школы и средний балл по всем участникам).
  161. from collections import defaultdict
  162.  
  163. school_scores = defaultdict(list)
  164. total_score = 0
  165. total_participants = 0
  166.  
  167. with open('test.txt', 'r', encoding='utf-8') as f:
  168.     for line in f:
  169.         if line.strip():
  170.             surname, name, school, score = line.split()
  171.             score = int(score)
  172.             school_scores[int(school)].append(score)
  173.             total_score += score
  174.             total_participants += 1
  175.  
  176. average_score = total_score / total_participants
  177.  
  178. schools_above_average = []
  179.  
  180. for school, scores in school_scores.items():
  181.     school_average = sum(scores) / len(scores)
  182.     if school_average > average_score:
  183.         schools_above_average.append(school)
  184.  
  185. schools_above_average.sort()
  186.  
  187. for school in schools_above_average:
  188.     print(school, end=' ')
  189. #10)В условиях предыдущей задачи выведите в порядке возрастания номера школ, из которых наибольшее количество участников стало #победителями олимпиады.
  190. from collections import defaultdict
  191.  
  192. school_winners = defaultdict(int)  # Словарь для подсчёта победителей из каждой школы
  193. participants = []
  194.  
  195. with open('test.txt', 'r', encoding='utf-8') as f:
  196.     for line in f:
  197.         if line.strip():
  198.             surname, name, school, score = line.split()
  199.             participants.append((int(score), surname, name, int(school)))
  200.  
  201. participants.sort(reverse=True)  # Сортировка по баллам в убывающем порядке
  202. winner_score = participants[0][0]  # Балл победителя
  203.  
  204. for score, _, _, school in participants:
  205.     if score == winner_score:
  206.         school_winners[school] += 1
  207.  
  208. max_winners = max(school_winners.values())  # Находим максимальное число победителей из одной школы
  209.  
  210. schools_with_most_winners = [school for school, count in school_winners.items() if count == max_winners]
  211. schools_with_most_winners.sort()
  212.  
  213. for school in schools_with_most_winners:
  214.     print(school, end=' ')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement