是上一个http://kidscode.cn/archives/16988/islook/1的GUI版
import tkinter as tk
from tkinter import messagebox
def permutations(array):
permutation = []
for first_num in array:
array2 = array[:]
array2.remove(first_num)
for second_num in array2:
array3 = array2[:]
array3.remove(second_num)
for third_num in array3:
array4 = array3[:]
array4.remove(third_num)
forth_num = array4[0]
permutation.append([first_num, second_num, third_num, forth_num])
return permutation
def calc(lst):
result = permutations(lst)
operators = ["+", "-", "*", "/"]
list2 = []
for list1 in result:
number1 = list1[0]
number2 = list1[1]
number3 = list1[2]
number4 = list1[3]
for operator1 in operators:
for operator2 in operators:
for operator3 in operators:
expression = [
"(({0}{1}{2}){3}{4}){5}{6}".format(number1, operator1, number2, operator2, number3,
operator3, number4),
"({0}{1}{2}){3}({4}{5}{6})".format(number1, operator1, number2, operator2, number3,
operator3, number4),
"(({0}{1}({2}{3}{4})){5}{6})".format(number1, operator1, number2, operator2, number3,
operator3, number4),
"{0}{1}(({2}{3}{4}){5}{6})".format(number1, operator1, number2, operator2, number3,
operator3, number4),
"{0}{1}({2}{3}({4}{5}{6}))".format(number1, operator1, number2, operator2, number3,
operator3, number4),
"{0}{1}{2}{3}{4}{5}{6}".format(number1, operator1, number2, operator2, number3,
operator3, number4)
]
for e in expression:
try:
if round(eval(e), 2) == 24:
list2.append(e)
except ZeroDivisionError:
pass
list3 = list(set(list2))
return list3
class App:
def __init__(self, root):
self.root = root
self.root.geometry('600x400')
self.root.title('24点-计算器')
self.input_frame = tk.Frame(self.root)
self.input_frame.place(relx=0.5, rely=0.2, relwidth=0.8, relheight=0.2, anchor='n')
self.num_entry1 = tk.Entry(self.input_frame, width=5, font=('Arial', 16))
self.num_entry2 = tk.Entry(self.input_frame, width=5, font=('Arial', 16))
self.num_entry3 = tk.Entry(self.input_frame, width=5, font=('Arial', 16))
self.num_entry4 = tk.Entry(self.input_frame, width=5, font=('Arial', 16))
self.num_entry1.place(relx=0.1, rely=0.5, anchor='center')
self.num_entry2.place(relx=0.3, rely=0.5, anchor='center')
self.num_entry3.place(relx=0.5, rely=0.5, anchor='center')
self.num_entry4.place(relx=0.7, rely=0.5, anchor='center')
self.num_label1 = tk.Label(self.input_frame, text='第一个数字', font=('Arial', 12))
self.num_label2 = tk.Label(self.input_frame, text='第二个数字', font=('Arial', 12))
self.num_label3 = tk.Label(self.input_frame, text='第三个数字', font=('Arial', 12))
self.num_label4 = tk.Label(self.input_frame, text='第四个数字', font=('Arial', 12))
self.num_label1.place(relx=0.1, rely=0.2, anchor='center')
self.num_label2.place(relx=0.3, rely=0.2, anchor='center')
self.num_label3.place(relx=0.5, rely=0.2, anchor='center')
self.num_label4.place(relx=0.7, rely=0.2, anchor='center')
# 添加计算按钮、结果标签和滚动条
self.compute_button = tk.Button(self.root, text='计算', font=('Arial', 12),command=self.compute)
self.compute_button.place(relx=0.5, rely=0.45, anchor='n')
def compute(self):
# 获取输入框中的数字
nums = []
try:
nums.append(int(self.num_entry1.get()))
nums.append(int(self.num_entry2.get()))
nums.append(int(self.num_entry3.get()))
nums.append(int(self.num_entry4.get()))
except ValueError:
messagebox.showerror('Error', '请输入整数数字!')
return
answer = calc(nums)
if len(answer) == 0:
messagebox.showwarning('无解', '此问题无解!')
else:
ans = "\n".join(answer)
messagebox.showinfo('求解成功!', f'该问题的解为: \n{ans}')
root = tk.Tk()
app = App(root)
root.mainloop()
本站作者已申明原创,禁止转载!
文章内容属作者个人观点,不代表本站立场,如有侵权立删。






