用户:月光之树查看:1 回复:4 评论:1 创建时间:2023-06-27T22:50:28
众所周知,24点是一款能锻炼智力的游戏,今天教大家如何用python去实现它,废话不多说,俺们现在开始。
上图片:
正片开始,
我会交出代码的
来,上代码:
import tkinter as tk
from tkinter import messagebox
import itertools
import operator
import random
def calculate(a, b, op):
if op == "+":
return a + b
if op == "-":
return a - b
if op == "*":
return a * b
if op == "/":
return a / b if b != 0 else None
def solve_24(nums, target=24):
ops = ["+", "-", "*", "/"]
num_permutations = list(itertools.permutations(nums))
op_permutations = list(itertools.product(ops, repeat=3))
results = []
for num_perm in num_permutations:
for op_perm in op_permutations:
expr = f"({num_perm[0]} {op_perm[0]} {num_perm[1]}) {op_perm[1]} {num_perm[2]} {op_perm[2]} {num_perm[3]}"
try:
result = eval(expr)
except ZeroDivisionError:
result = None
if result == target:
results.append(expr)
return results
def check_solution():
user_solution = user_input.get()
solution_nums = user_solution
solution_nums = solution_nums.replace("(", " ")
solution_nums = solution_nums.replace(")", " ")
solution_nums = solution_nums.replace("+", " ")
solution_nums = solution_nums.replace("-", " ")
solution_nums = solution_nums.replace("*", " ")
solution_nums = solution_nums.replace("/", " ")
user_solution_nums = [s for s in solution_nums.split() if s.isdigit()]
print(user_solution_nums)
x = int(user_solution_nums[0])
if x in nums:
num_bool = 1
else:
num_bool = 0
user_input.delete(0, tk.END)
x = int(user_solution_nums[0])
if x in nums:
num_bool = 1
else:
num_bool = 0
user_input.delete(0, tk.END)
x = int(user_solution_nums[0])
if x in nums:
num_bool = 1
else:
num_bool = 0
user_input.delete(0, tk.END)
x = int(user_solution_nums[0])
if x in nums:
num_bool = 1
else:
num_bool = 0
user_input.delete(0, tk.END)
if num_bool == 0:
messagebox.showerror("结果", "不包含生成的数字")
try:
result = eval(user_input.get())
except (SyntaxError, NameError, ZeroDivisionError):
result = None
if result == 24 and num_bool:
messagebox.showinfo("结果", "正确!")
generate_valid_numbers() # 生成新的数字
else:
if num_bool == 1:
messagebox.showerror("结果", "错误!")
user_input.delete(0, tk.END)
def generate_valid_numbers():
global nums, solutions, timer
while True:
nums = [random.randint(1, 13) for _ in range(4)]
solutions = set(solve_24(nums))
if solutions:
break
for i, num in enumerate(nums):
num_vars[i].set(num)
user_input.delete(0, tk.END)
timer = 50
start_timer()
timer_var.set(f"剩余时间:{timer}秒")
def show_solution():
if solutions:
solution_str = list(solutions)[random.randint(0, len(solutions) - 1)]
messagebox.showinfo("答案", f"一个可能的答案:{solution_str}")
generate_valid_numbers()
else:
messagebox.showinfo("答案", "无解!")
def update_timer():
global timer, timer_expired
if timer > 0:
timer -= 1
timer_var.set(f"剩余时间:{timer}秒")
root.after(1000, update_timer)
elif not timer_expired:
timer_var.set("时间到!")
timer_expired = True
show_solution()
def start_timer():
global timer, timer_expired
timer = 50
timer_expired = False
update_timer()
def hint():
if solutions:
user_input.delete(0, tk.END)
user_input.insert(0, list(solutions)[random.randint(0, len(solutions) - 1)])
root = tk.Tk()
root.title("24点")
num_vars = [tk.StringVar() for _ in range(4)]
num_labels = [tk.Label(root, textvariable=num_var, font=("Arial", 24)) for num_var in num_vars]
for i, num_label in enumerate(num_labels):
num_label.grid(row=0, column=i)
user_input = tk.Entry(root, width=30)
user_input.grid(row=1, column=0, columnspan=4)
check_button = tk.Button(root, text="检查解答", command=check_solution)
check_button.grid(row=2, column=0)
generate_button = tk.Button(root, text="生成数字", command=generate_valid_numbers)
generate_button.grid(row=2, column=1)
start_button = tk.Button(root, text="重启计时", command=start_timer)
start_button.grid(row=2, column=2)
hint_button = tk.Button(root, text="提示", command=hint)
hint_button.grid(row=2, column=3)
timer_var = tk.StringVar()
timer_label = tk.Label(root, textvariable=timer_var)
timer_label.grid(row=3, column=0, columnspan=4)
generate_valid_numbers()
root.mainloop()
代码是精简版,没空行,没注释
自己去理解吧!
开发完成
最终代码
import tkinter as tk
from tkinter import messagebox
import itertools
import operator
import random
def calculate(a, b, op):
if op == "+":
return a + b
if op == "-":
return a - b
if op == "*":
return a * b
if op == "/":
return a / b if b != 0 else None
def solve_24(nums, target=24):
ops = ["+", "-", "*", "/"]
num_permutations = list(itertools.permutations(nums))
op_permutations = list(itertools.product(ops, repeat=3))
results = []
for num_perm in num_permutations:
for op_perm in op_permutations:
expr = f"({num_perm[0]} {op_perm[0]} {num_perm[1]}) {op_perm[1]} {num_perm[2]} {op_perm[2]} {num_perm[3]}"
try:
result = eval(expr)
except ZeroDivisionError:
result = None
if result == target:
results.append(expr)
return results
def check_solution():
user_solution = user_input.get()
solution_nums = user_solution
solution_nums = solution_nums.replace("(", " ")
solution_nums = solution_nums.replace(")", " ")
solution_nums = solution_nums.replace("+", " ")
solution_nums = solution_nums.replace("-", " ")
solution_nums = solution_nums.replace("*", " ")
solution_nums = solution_nums.replace("/", " ")
user_solution_nums = [s for s in solution_nums.split() if s.isdigit()]
print(user_solution_nums)
num_bool = 1
if len(user_solution_nums) == 4:
x = int(user_solution_nums[0])
if x in nums:
if num_bool:
num_bool = 1
else:
num_bool = 0
else:
num_bool = 0
user_input.delete(0, tk.END)
x = int(user_solution_nums[1])
if x in nums:
if num_bool:
num_bool = 1
else:
num_bool = 0
else:
num_bool = 0
user_input.delete(0, tk.END)
x = int(user_solution_nums[2])
if x in nums:
if num_bool:
num_bool = 1
else:
num_bool = 0
else:
num_bool = 0
user_input.delete(0, tk.END)
x = int(user_solution_nums[3])
if x in nums:
if num_bool:
num_bool = 1
else:
num_bool = 0
else:
num_bool = 0
user_input.delete(0, tk.END)
else:
num_bool = 0
if num_bool == 0:
messagebox.showerror("结果", "不包含生成的数字")
user_input.delete(0, tk.END)
try:
result = eval(user_input.get())
except (SyntaxError, NameError, ZeroDivisionError):
result = None
if result == 24 and num_bool:
messagebox.showinfo("结果", "正确!")
generate_valid_numbers() # 生成新的数字
else:
if num_bool == 1:
messagebox.showerror("结果", "错误!")
user_input.delete(0, tk.END)
def generate_valid_numbers():
global nums, solutions, timer
while True:
nums = [random.randint(1, 13) for _ in range(4)]
solutions = set(solve_24(nums))
if solutions:
break
for i, num in enumerate(nums):
num_vars[i].set(num)
user_input.delete(0, tk.END)
timer = "未开启计时模式"
timer_var.set(timer)
def show_solution():
if solutions:
solution_str = list(solutions)[random.randint(0, len(solutions) - 1)]
messagebox.showinfo("答案", f"一个可能的答案:{solution_str}")
generate_valid_numbers()
else:
messagebox.showinfo("答案", "无解!")
def update_timer():
global timer, timer_expired
if isinstance(timer, int):
if timer > 0:
timer -= 1
timer_var.set(f"剩余时间:{timer}秒")
root.after(1000, update_timer)
elif not timer_expired:
timer_var.set("时间到!")
timer_expired = True
show_solution()
def start_timer():
global timer, timer_expired
timer = 50
timer_expired = False
update_timer()
def hint():
if solutions:
user_input.delete(0, tk.END)
user_input.insert(0, list(solutions)[random.randint(0, len(solutions) - 1)])
root = tk.Tk()
root.title("24点")
num_vars = [tk.StringVar() for _ in range(4)]
num_labels = [tk.Label(root, textvariable=num_var, font=("Arial", 24)) for num_var in num_vars]
for i, num_label in enumerate(num_labels):
num_label.grid(row=0, column=i)
user_input = tk.Entry(root, width=30)
user_input.grid(row=1, column=0, columnspan=4)
check_button = tk.Button(root, text="检查解答", command=check_solution)
check_button.grid(row=2, column=0)
generate_button = tk.Button(root, text="生成数字", command=generate_valid_numbers)
generate_button.grid(row=2, column=1)
start_button = tk.Button(root, text="开始计时", command=start_timer)
start_button.grid(row=2, column=2)
hint_button = tk.Button(root, text="提示", command=hint)
hint_button.grid(row=2, column=3)
timer_var = tk.StringVar()
timer_label = tk.Label(root, textvariable=timer_var)
timer_label.grid(row=3, column=0, columnspan=4)
generate_valid_numbers()
root.mainloop()点赞0
评论