Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from colorama import Fore, Style
- import os
- import logging
- logging.basicConfig(filename='graph_sequence.log', level=logging.INFO, format='%(asctime)s - %(message)s')
- def is_graphic_sequence(degrees):
- if sum(degrees) % 2 != 0:
- return False
- degrees.sort(reverse=True)
- for k in range(1, len(degrees) + 1):
- left_side = sum(degrees[:k])
- right_side = k * (k - 1) + sum(min(d, k) for d in degrees[k:])
- if left_side > right_side:
- return False
- return True
- def count_edges(degrees):
- return sum(degrees) // 2
- def save_results(results, file_name):
- file_path = f'{file_name}.txt'
- with open(file_path, 'w') as f:
- for seq, edges in results:
- f.write(f"Последовательность {seq} корректна. Количество рёбер: {edges}\n")
- return os.path.abspath(file_path)
- def display_intro():
- print(Fore.CYAN + "👋 Добро пожаловать в программу для проверки графических последовательностей!")
- print("✏️ Введите последовательности степеней через пробел.")
- print("✅ Для ввода нескольких последовательностей используйте ';' (например: '4 4 3; 5 5 4').")
- print("❌ Введите 'exit' для выхода." + Style.RESET_ALL)
- def validate_input(input_str):
- numbers = list(map(int, input_str.strip().split()))
- if any(num < 0 for num in numbers):
- raise ValueError("Все числа должны быть неотрицательными.")
- return numbers
- def process_sequences(sequences):
- results = []
- for seq_str in sequences:
- sequence = validate_input(seq_str)
- if is_graphic_sequence(sequence):
- edges = count_edges(sequence)
- results.append((sequence, edges))
- logging.info(f"Корректная последовательность: {sequence}, количество рёбер: {edges}")
- else:
- display_error(f"🚫 Ошибка: Последовательность {sequence} не является графической.")
- return results
- def display_results(results, total_sequences):
- print(Fore.GREEN + "\n✅ Корректные последовательности и количество рёбер:")
- if results:
- for seq, edges in results:
- print(Fore.WHITE + f"📊 Последовательность {seq} корректна. Количество рёбер: {edges}")
- print(Fore.WHITE + f"\n🔢 Всего введено последовательностей: {total_sequences}")
- print(Fore.WHITE + f"✔️ Корректных последовательностей: {len(results)}")
- else:
- print(Fore.WHITE + "❌ Нет корректных последовательностей для сохранения.")
- print(Fore.WHITE + f"\n🔢 Всего введено последовательностей: {total_sequences}")
- print(Fore.WHITE + f"✔️ Корректных последовательностей: {len(results)}")
- def get_save_choice():
- while True:
- save_choice = input(Fore.WHITE + "💾 Хотите сохранить результаты? (да/нет): ").strip().lower()
- if save_choice == 'да':
- return True
- elif save_choice == 'нет':
- return False
- else:
- display_error("🚫 Ошибка: Пожалуйста, введите 'да' или 'нет'.")
- def display_error(message):
- print(Fore.RED + message + Style.RESET_ALL)
- def main():
- display_intro()
- while True:
- user_input = input(Fore.WHITE + "\nВведите последовательности: ")
- if user_input.lower() == 'exit':
- print(Fore.WHITE + "👋 Выход из программы.")
- break
- if not user_input.strip():
- display_error("🚫 Ошибка: Ввод не может быть пустым. Пожалуйста, введите последовательности.")
- continue
- try:
- sequences = user_input.split(';')
- total_sequences = len(sequences)
- results = process_sequences(sequences)
- display_results(results, total_sequences)
- if results and get_save_choice():
- file_name = input(Fore.WHITE + "📝 Введите имя файла для сохранения (без расширения): ").strip()
- file_path = save_results(results, file_name)
- print(Fore.GREEN + f"✅ Результаты сохранены в файл '{file_path}'." + Style.RESET_ALL)
- else:
- print(Fore.WHITE + "❌ Результаты не сохранены.")
- except ValueError as e:
- display_error(f"🚫 Ошибка ввода: {e}")
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement