144 lines
5.9 KiB
Python
144 lines
5.9 KiB
Python
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
|