Python/Lab_7/Lab_5.py

144 lines
5.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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