from random import randint, sample from collections import Counter # Генеруємо список прізвищ для генерації учасників конкурсу. with open("list.txt") as surnames_list: surnames = ( surnames_list.read().splitlines() ) if __name__ == "__main__": while True: # Запит кількості учасників конкурсу. competitor_sample = input( f"Введіть кількість учасників конкурсу, мінімум 3, максимум {len(surnames)} " "(введіть \"в\" щоб вийти): " ) # Вихід з програми. if competitor_sample.lower() == "в": print("\nВихід з програми.") exit() # Перевірка коректності введених даних. elif not competitor_sample.isdigit(): print( "\nКількість учасників конкурсу має бути цілим додатнім числом, " "спробуйте ще раз.\n" ) continue competitor_sample = int(competitor_sample) # Перевірка коректності введених даних. if competitor_sample < 3: print( "\nКількість учасників конкурсу має бути не менше 3.\n" ) continue elif competitor_sample > len(surnames): print( f"\nКількість учасників конкурсу має бути не більше {len(surnames)}.\n" ) continue break else: competitor_sample = len(surnames) # Генеруємо список прізвищ. surnames = sample(surnames, competitor_sample) indent = len(max(surnames, key=len)) + 4 # Генеруємо словник з результатами тестування. competitors = {surname: randint(0, 100) for surname in surnames} if __name__ == "__main__": # Виводимо результати тестування. print("\nРезультати тестування:") for surname in competitors: if competitors[surname] % 10 == 1: print(f"{surname:>{indent}} : {competitors[surname]} бал.") elif ( competitors[surname] % 10 > 1 and competitors[surname] % 10 <= 4 and competitors[surname] > 20 ): print(f"{surname:>{indent}} : {competitors[surname]} бали.") else: print(f"{surname:>{indent}} : {competitors[surname]} балів.") # Генеруємо список переможців. winners = Counter(competitors).most_common(3) indent = len(max([surname[0] for surname in winners], key=len)) + 4 if __name__ == "__main__": # Виводимо переможців. print("\nПереможці:") for surname in winners: if surname[1] % 10 == 1: print(f"{surname[0]:>{indent}} : {surname[1]} бал.") elif surname[1] % 10 > 1 and surname[1] % 10 <= 4 and surname[1] > 1: print(f"{surname[0]:>{indent}} : {surname[1]} бали.") else: print(f"{surname[0]:>{indent}} : {surname[1]} балів.") while True: # Запитуємо користувача про бажання шукати учасників. search_mode = input( "\nЧи хочете знайти конкретних учасників за прізвищами? " "(Так/Ні): " ).lower() if search_mode == "так": while True: surnames_to_search = input( "\nВведіть прізвища учасників яких хочете шукати через кому " "(введіть \"в\" щоб вийти): " ).strip(" ,.:").split(", ") # Перевірка коректності введених даних. for i in surnames_to_search: if (" " in i and "," not in i) or ( "," in i and " " not in i ): print( "\nПрізвища учасників мають бути розділені через кому і пропуск, " "спробуйте ще раз." ) break else: break continue # Виводимо результати пошуку. if surnames_to_search & competitors.keys(): print("\nРезультати пошуку:") indent = len(max(surnames_to_search & competitors.keys(), key=len)) + 4 for surname in surnames_to_search & competitors.keys(): if competitors[surname] % 10 == 1: print(f"{surname:>{indent}} : {competitors[surname]} бал.") elif ( competitors[surname] % 10 > 1 and competitors[surname] % 10 <= 4 and competitors[surname] > 20 ): print(f"{surname:>{indent}} : {competitors[surname]} бали.") else: print(f"{surname:>{indent}} : {competitors[surname]} балів.") break else: print("\nУчасників з цими прізвищами не було знайдено.") break elif search_mode == "ні": print("\nВихід з програми.") break else: print("\nНекоректна відповідь, спробуйте ще раз.") continue