Files
labs/labPython/lab20/task_2.py
2026-05-02 20:27:02 +05:00

76 lines
2.3 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.
# task: Счастливый билет
# Дано шестизначное число и число N. Между цифрами можно вставлять +, -, ничего.
# Нужно вывести все выражения, равные N, либо сообщение об отсутствии решений.
import itertools
def generate_expressions(digits):
ops = ["+", "-", ""]
for comb in itertools.product(ops, repeat=5):
expr = digits[0]
for i in range(5):
expr += comb[i] + digits[i + 1]
yield expr
def safe_eval(expr):
try:
return eval(expr)
except:
return None
def solve(ticket, target):
results = []
digits = list(ticket)
for expr in generate_expressions(digits):
val = safe_eval(expr)
if val == target:
results.append(f"{expr}={target}")
return results
def is_valid_ticket(ticket):
return ticket.isdigit() and len(ticket) == 6 and int(ticket) > 0
def is_valid_target(target):
return target.isdigit() and 0 < int(target) < 10**9
while True:
print("\nВыберите действие:")
print("1 - Ввести данные")
print("2 - Выход")
choice = input("Ваш выбор: ").strip()
if choice == "2":
print("Выход из программы.")
break
elif choice == "1":
ticket = input("Введите шестизначный номер билета: ").strip()
target = input("Введите число N (0 < N < 1e9): ").strip()
if not is_valid_ticket(ticket):
print("Ошибка: билет должен быть шестизначным натуральным числом.")
continue
if not is_valid_target(target):
print("Ошибка: N должно быть натуральным числом (0 < N < 1e9).")
continue
target = int(target)
solutions = solve(ticket, target)
if solutions:
print("\nНайденные решения:")
for s in solutions:
print(s)
else:
print("Решение не существует.")
else:
print("Некорректный выбор. Попробуйте снова.")