24点游戏是经典的纸牌益智游戏。
我的思路是把这4个数分成2部分,前两个数一起,后两个数一起,先计算除前两个数所有可能的结果和后两个数所有可能的结果。最后将它们的结果互相计算,结果与24比较,如果等于24则成功。
建立用户类,整个游戏的体系就是建立一个用户类来存储用户的信息,如姓名,生命值,分数等,在类里定义函数引导用户输入算术式进行游戏
代码如下:
from random import randint
import time
POKER_DICT = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 'J(11)', 12: 'Q(12)', 13: 'K(13)'}
cal_list = ['+', '-', '*', '/']
tmp_list1 = {} # 存放前两个数所有计算结果
tmp_list2 = {} # 存放后两个数计算结果
results = [] # 存放运算结果=24的所有式子
num_list = []
class User():
def __init__(self, name):
self.name = name
self.life = 3
self.score = 0
self.nums = []
def user_input(self):
return input("\n欢迎您" + name + "\n请输入包含这四个牌的运算表达式(你有60s时间输入,否则失败!如果表达式的结果为24,你将赢得该局!)\n")
def poker(self):
for i in range(4):
element = randint(1, 13)
self.nums.append(element)
print(self.nums)
return self.nums
def judge(self):
while True:
flag = True
start_time = time.time()
str_inp = self.user_input()
end_time = time.time()
if (end_time-start_time) < 60:
for i in self.nums:
if str(i) not in str_inp:
flag = False
print(flag)
if flag is True:
if eval(str_inp) == 24:
print("恭喜赢得本局胜利!")
self.score += 10
else:
print("很遗憾,计算的结果不等于24。")
self.life -= 1
break
else:
print("输入的数必须是你的牌数!")
else:
self.life -= 1
print("您超时了 生命值-1")
下面定义的函数就是计算两个数之间所有可能的计算结果:
def cal(num_1, num_2, temp_list, *args):
for j in cal_list:
if args and eval(str(num_1) + j + str(num_2)) == 24: # 如果参数args存在说明是进行最后的运算,需要判断是否等于24
temp_list.append(str(num_1) + j + str(num_2))
elif len(args) == 0: # 如果没有传入args参数说明只是第一次运算,将结果存入相应的字典就可以
temp_list[str(num_1) + j + str(num_2)] = (eval(str(num_1) + j + str(num_2)))
if eval(str(num_1) + j + str(num_2)) != eval(str(num_2) + j + str(num_1)):
temp_list[str(num_2) + j + str(num_1)] = (eval(str(num_2) + j + str(num_1)))
判断是否等于24:
def is24():
i = 0
while i < 3:
if i == 0:
# 将前两个数的所有计算结果以及表达式存入字典
cal(num_list[i], num_list[i + 1], tmp_list1) tmp_list1
else:
# 将后两个数的所有计算结果以及表达式存入字典
cal(num_list[i], num_list[i + 1], tmp_list2) tmp_list2
i += 2
for i in tmp_list1:
for j in tmp_list2:
# 对这两个字典进行循环,计算这两个之间所有的结果 如果等于24将其表达式存入results列表
cal(i, j, results, 1)
在main方法里对用户实例化并调用方法开始游戏:
if __name__ == '__main__':
name = input("请输入你的名字:")
user = User(name)
poke = user.poker()
print("你抽到的四张牌是:")
for i in poke:
print(POKER_DICT.get(i), end=" ")
num_list.append(i)
while user.life > 0:
user.judge()
print(num_list)
is24()
if len(results) == 0:
print("这四个数无法组成等于24的算术式")
else:
print("您的三次机会用完,下面是所有答案")
for i in results:
print(i)