/
a_lukin
/
Labs_Python
Обзор
Документация
Войти
/
a_lukin
/
Labs_Python
Код
Запросы
2
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab1
lab1.py
186 строк
9 KB
a_lukin
lab1
13 фев 2026, 22:43
Верифицирован
13 фев 2026, 22:43
cd53d81
Код
Авторство
О чём код?
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Программа «Астрологический помощник» Функции: - определение знака зодиака по дате рождения; - вывод характеристик знака; - расчёт совместимости знаков. """ def get_zodiac_sign(day, month): """ Определяет знак зодиака по дню и месяцу рождения. Args: day (int): день рождения (1-31) month (int): месяц рождения (1-12) Returns: str: название знака зодиака или ошибка """ if month == 1: return "Козерог" if day < 20 else "Водолей" elif month == 2: return "Водолей" if day < 19 else "Рыбы" elif month == 3: return "Рыбы" if day < 21 else "Овен" elif month == 4: return "Овен" if day < 20 else "Телец" elif month == 5: return "Телец" if day < 21 else "Близнецы" elif month == 6: return "Близнецы" if day < 22 else "Рак" elif month == 7: return "Рак" if day < 23 else "Лев" elif month == 8: return "Лев" if day < 23 else "Дева" elif month == 9: return "Дева" if day < 23 else "Весы" elif month == 10: return "Весы" if day < 23 else "Скорпион" elif month == 11: return "Скорпион" if day < 23 else "Стрелец" elif month == 12: return "Стрелец" if day < 22 else "Козерог" else: return "Ошибка: неверный месяц" def get_zodiac_description(sign): """ Возвращает краткую характеристику знака зодиака. Args: sign (str): название знака зодиака Returns: str: характеристика знака """ descriptions = { "Овен": "Энергичный, инициативный, лидер по натуре. Любит вызовы и не боится рисковать.", "Телец": "Практичный, надёжный, ценит комфорт и стабильность. Упрямый, но преданный.", "Близнецы": "Общительный, любознательный, гибкий. Легко адаптируется к новым условиям.", "Рак": "Чувствительный, заботливый, семейный. Обладает сильной интуицией.", "Лев": "Великодушный, уверенный, харизматичный. Любит быть в центре внимания.", "Дева": "Аналитический, аккуратный, трудолюбивый. Стремится к совершенству.", "Весы": "Гармоничный, дипломатичный, справедливый. Ценит красоту и равновесие.", "Скорпион": "Интенсивный, страстный, загадочный. Обладает сильной волей и проницательностью.", "Стрелец": "Оптимистичный, свободолюбивый, авантюрный. Любит путешествия и новые знания.", "Козерог": "Целеустремлённый, дисциплинированный, ответственный. Стремится к успеху и стабильности.", "Водолей": "Оригинальный, независимый, прогрессивный. Мыслит нестандартно и ценит свободу.", "Рыбы": "Мечтательный, эмпатичный, творческий. Обладает богатым воображением и интуицией." } return descriptions.get(sign, "Характеристика не найдена.") def get_compatibility(sign1, sign2): """ Оценивает совместимость двух знаков зодиака. Args: sign1 (str): первый знак зодиака sign2 (str): второй знак зодиака Returns: str: уровень совместимости """ # Упрощённая матрица совместимости (для примера) compatible_pairs = [ ("Овен", "Лев"), ("Овен", "Стрелец"), ("Телец", "Дева"), ("Телец", "Козерог"), ("Близнецы", "Весы"), ("Близнецы", "Водолей"), ("Рак", "Скорпион"), ("Рак", "Рыбы"), ("Лев", "Овен"), ("Лев", "Стрелец"), ("Дева", "Телец"), ("Дева", "Козерог"), ("Весы", "Близнецы"), ("Весы", "Водолей"), ("Скорпион", "Рак"), ("Скорпион", "Рыбы"), ("Стрелец", "Овен"), ("Стрелец", "Лев"), ("Козерог", "Телец"), ("Козерог", "Дева"), ("Водолей", "Близнецы"), ("Водолей", "Весы"), ("Рыбы", "Рак"), ("Рыбы", "Скорпион") ] if sign1 == sign2: return "Отличная совместимость: вы очень похожи!" elif (sign1, sign2) in compatible_pairs or (sign2, sign1) in compatible_pairs: return "Хорошая совместимость: у вас много общего!" else: return "Средняя совместимость: потребуются усилия для взаимопонимания." def input_date(): """ Запрашивает у пользователя дату рождения и проверяет корректность ввода. Returns: tuple: (день, месяц) или (None, None) при ошибке """ while True: try: day = int(input("Введите день рождения (1–31): ")) month = int(input("Введите месяц рождения (1–12): ")) if 1 <= day <= 31 and 1 <= month <= 12: # Дополнительная проверка на корректность дня в месяце (упрощённо) if month in [4, 6, 9, 11] and day > 30: print("Ошибка: в этом месяце не более 30 дней. Попробуйте снова.") continue elif month == 2 and day > 29: print("Ошибка: в феврале не более 29 дней. Попробуйте снова.") continue return day, month else: print("Ошибка: день должен быть от 1 до 31, месяц — от 1 до 12. Попробуйте снова.") except ValueError: print("Ошибка: введите числа. Попробуйте снова.") def main(): """Основная функция программы — консольное меню.""" print("🔮 Астрологический помощник") print("=" * 30) while True: print("\nВыберите действие:") print("1. Определить знак зодиака по дате рождения") print("2. Узнать характеристику знака зодиака") print("3. Проверить совместимость знаков") print("4. Выход") choice = input("\nВаш выбор (1–4): ").strip() if choice == "1": print("\n→ Определение знака зодиака") date_result = input_date() if date_result: day, month = date_result sign = get_zodiac_sign(day, month) print(f"\nВаш знак зодиака: {sign}") elif choice == "2": print("\n→ Характеристика знака зодиака") sign = input("Введите название знака зодиака: ").strip().capitalize() description = get_zodiac_description(sign) print(f"\nХарактеристика {sign}:\n{description}") elif choice == "3": print("\n→ Совместимость знаков зодиака") sign1 = input("Введите первый знак зодиака: ").strip().capitalize() sign2 = input("Введите второй знак зодиака: ").strip().capitalize() compatibility = get_compatibility(sign1, sign2) print(f"\nСовместимость {sign1} и {sign2}:\n{compatibility}") elif choice == "4": print("До свидания! 🌠") break else: print("Ошибка: выберите пункт меню от 1 до 4.") print("-" * 30) if __name__ == "__main__": main()