import itertools import random import re
# 计算出结果的函数
def solution(data): for i in itertools.permutations(data): for j in itertools.product(['+', '-', '*', '/'], repeat=3): li = [ f'(({i[0]}{j[0]}{i[1]}){j[1]}{i[2]}){j[2]}{i[3]}', f'({i[0]}{j[0]}{i[1]}){j[1]}({i[2]}{j[2]}{i[3]})', f'({i[0]}{j[0]}({i[1]}{j[1]}{i[2]})){j[2]}{i[3]}', f'{i[0]}{j[0]}(({i[1]}{j[1]}{i[2]}){j[2]}{i[3]})', f'{i[0]}{j[0]}({i[1]}{j[1]}({i[2]}{j[2]}{i[3]}))' ] for k in li: try: if eval(k) == 24: print(f'{k}=24') return True except ZeroDivisionError: pass return False
#机器给人出题
def A2(): poke = [str(random.randint(1, 13)), str(random.randint(1, 13)), str(random.randint(1, 13)), str(random.randint(1, 13))] poke = sorted(poke) print(poke) expr = input("输入运算式:") li = re.split('[\+\-\*\/\(\)]', expr) li = sorted(li)[-4:] if len(li) == 4: if li == poke: if eval(expr) == 24: print("正确!") else: print('错误!') else: print("检测到错误,exit") else: print("请遵守规则")
#人给机器出题
def A1(): print("规则:\n一、输入四个1-13的数字\n二、各个数字之间要使用空格") print("请给机器出题:") topic = input().split() for i in topic: i = int(i) if 1 <= i <= 13: topic = sorted(topic) flag = solution(topic) if flag: print("\n得出") break elif not flag: print("无法得出") break else: print("请输入1-13的数字") break
#框架
while True: print("1.给机器出题") print("2.机器出题") print("3.退出") print("选择序号:") cmd = input() while True: if cmd == '1' or '2' or '3': break else: print("数据不规范,请重新输入!") if cmd == '1': A1() elif cmd == '2': A2() elif cmd == '3': break else: pass input("按回车退出")