You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.1 KiB

# -*- encoding: utf-8 -*-
"""
@Author: packy945
@FileName: data.py
@DateTime: 2023/5/11 14:36
@SoftWare: PyCharm
"""
from itertools import permutations
import random
import tkinter as tk
MARK = '#ff0000'
NOMARK = '#cccccc'
class Aexp:
def __init__(self, a, b, c, d):
self.Aexp_cur = 0
self.num = 0
self.card = [a, b, c, d]
self.answer = []
self.Color = []
self.Aexp(a, b, c, d)
def refresh(self, a, b, c, d):
self.Aexp_cur = 0
self.num = 0
self.card = [a, b, c, d]
# print(self.card)
self.answer = []
self.Color = []
self.Aexp(a, b, c, d)
def Aexp(self, one, two, three, four):
'''
输入四个数求24点
:param one:
:param two:
:param three:
:param four:
:return: 求解24点结果若无法得出则返回无法求得结果
'''
self.Aexp_cur = 0
my_list = [one, two, three, four]
result = [c for c in permutations(my_list, 4)]
list2 = [] # 算出24的排列组合的列表
symbols = ["+", "-", "*", "/"]
flag = False
for one, two, three, four in result:
for s1 in symbols:
for s2 in symbols:
for s3 in symbols:
express = ["(({0}{1}{2}){3}{4}){5}{6}".format(one[1], s1, two[1], s2, three[1], s3, four[1]),
"({0}{1}{2}){3}({4}{5}{6})".format(one[1], s1, two[1], s2, three[1], s3, four[1]),
"({0}{1}({2}{3}{4})){5}{6}".format(one[1], s1, two[1], s2, three[1], s3, four[1]),
"{0}{1}(({2}{3}{4}){5}{6})".format(one[1], s1, two[1], s2, three[1], s3, four[1]),
"{0}{1}({2}{3}({4}{5}{6}))".format(one[1], s1, two[1], s2, three[1], s3, four[1])]
# if str(one) + str(two) + str(three) + str(four) == "8383":
# print(express)
for e in express:
try:
if round(eval(e), 6) == 24:
e = del_parentheses(e)
list2.append(e)
self.Color.append([one[0], two[0], three[0], four[0]])
flag = True
except ZeroDivisionError:
pass
if flag:
self.answer = list2
self.num = len(list2)
# return list3
else:
self.answer = ["无法得出24点"]
self.Color.append(None)
self.num = 0
#删除最外层括号
def del_parentheses(e):
if e[0] == '(' and e[-1] == ')':
try:
eval(e[1:len(e)-1])
except:
pass
else:
if round(eval(e[1:len(e)-1]),6) == 24:
return e[1:len(e)-1]
return e
11 months ago
if __name__ == '__main__':
ans = Aexp(1, 2, 4, 6)
for i in ans.answer:
print(i)
# print(ans)
pass