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.

97 lines
3.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- 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]
# print(self.card)
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