Python/Lab_7/Lab_5.py

144 lines
5.9 KiB
Python
Raw Normal View History

2024-03-09 17:38:18 +02:00
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