问题描述

24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。

内容

算法分析

1.函数random_number()随机生成4个1~13范围内的整数;
2.poke()函数将生成的四个随机整数以扑克牌的形式输出(A,2,3,4,5,6,7,8,9,10,J,Q,K);
3.fun()函数进行两个数的四则运算;
4.calculate()函数计算所有情况;
5.timer()函数实现计时器功能;
6.player()函数就是玩家进行游戏:
玩家初始生命值为3,分数为0,若随机生成的四个数可以组成24并且玩家能写出其中一种表达式则可得十分,若四张牌无法完成24点或者玩家未在规定的时间内完成,则生命值减1,减到0游戏结束。

概要设计

流程图:

代码如下:

"""
@author: CheYuHang
@software: PyCharm
@file: puke.py
@time: 2021/5/9 12:35
"""import random
import timedef random_number():"""随机生成四个整数:return:"""y = []for i in range(4):y.append(random.randint(1,13))return y# def fun(k,l,i):
#     """
#     两个数据之间的运算
#     :param k:
#     :param l:
#     :param i:
#     :return:
#     """
#     if i==0:
#         tem = k+l
#         return tem
#     elif i==1:
#         tem = k-l
#         return tem
#     elif i==2:
#         tem = k*l
#         return tem
#     elif i==3:
#         if l==0:
#             return
#         else:
#             tem = k/l
#             return tem
def fun(k, l, i):"""两个数据之间的运算:param k::param l::param i::return:"""if i==0:if (type(k) is int or type(k) is float) and (type(l) is int or type(l) is float):tem = k + lreturn temelse:returnelif i==1:if (type(k) is int or type(k) is float) and (type(l) is int or type(l) is float):tem = k - lreturn temelse:returnelif i==2:if (type(k) is int or type(k) is float) and (type(l) is int or type(l) is float):tem = k * lreturn temelse:returnelif i==3:if (type(k) is int or type(k) is float) and (type(l) is int or type(l) is float):if l != 0:tem = k / lreturn temelse:returnelse:returndef poker(y):"""将生成的随机数以扑克牌的形式输出:param y::return:"""y1 = y.copy()while 1 in y1 or 11 in y1 or 12 in y1 or 13 in y1:if 1 in y1:z = y1.index(1)y1.remove(1)y1.insert(z, 'A')if 11 in y1:z = y1.index(11)y1.remove(11)y1.insert(z, 'J')if 12 in y1:z = y1.index(12)y1.remove(12)y1.insert(z, 'Q')if 13 in y1:z = y1.index(13)y1.remove(13)y1.insert(z, 'K')continue# if 1 in y1:#     z = y1.index(1)#     y1.remove(1)#     y1.insert(z, 'A')# if 11 in y1:#     z = y1.index(11)#     y1.remove(11)#     y1.insert(z, 'J')# if 12 in y1:#     z = y1.index(12)#     y1.remove(12)#     y1.insert(z, 'Q')# if 13 in y1:#     z = y1.index(13)#     y1.remove(13)#     y1.insert(z, 'K')print("随机抽取的四张牌为:", y1[0], y1[1], y1[2], y1[3])# y = random_number()
# print(y)
# y = [7, 1, 11, 6]
# x = ['+', '-', '*', '/']def calculate(y):"""计算,求出符合题目要求的:return:"""result_list = []result_list2 = []temp = 0temp1 = 0temp2 = 0for i in range(0,4):for j in range(0,4):for k in range(0,4):for l in range(0,4):if i == j or i == k or i == l or j == k or j == l or k == l:continueelse:for n in range(0,4):for m in range(0,4):for p in range(0,4):for q in range(0,6):result = 0if q == 0:temp1 = fun(y[i], y[j], n)temp1 = fun(temp1, y[k], m)result = fun(temp1, y[l], p)if result==24:result_list.append("(({0}{1}{2}){3}{4}){5}{6}=24".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))result_list2.append("(({0}{1}{2}){3}{4}){5}{6}".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))# print("(({0}{1}{2}){3}{4}){5}{6}=24".format(y[i], x[n], y[j], x[m], y[k],#                                             x[p], y[l]))temp += 1#breakcontinueelif q == 1:temp1 = fun(y[i], y[j], n)temp2 = fun(y[k], y[l], p)result = fun(temp1, temp2, m)if result == 24:result_list.append("({0}{1}{2}){3}({4}{5}{6})=24".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))result_list2.append("({0}{1}{2}){3}({4}{5}{6})".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))# print("({0}{1}{2}){3}({4}{5}{6})=24".format(y[i], x[n], y[j], x[m], y[k],#                                             x[p], y[l]))temp += 1#breakcontinueelif q == 2:temp1 = fun(y[j], y[k], m)temp1 = fun(y[i], temp1, n)result = fun(temp1, y[l], p)if result == 24:result_list.append("({0}{1}({2}{3}{4})){5}{6}=24".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))result_list2.append("({0}{1}({2}{3}{4})){5}{6}".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))# print("({0}{1}({2}{3}{4})){5}{6}=24".format(y[i], x[n], y[j], x[m], y[k],#                                             x[p], y[l]))temp += 1# breakcontinue# elif q==3:#     temp1 = fun(y[k], y[l], m)#     temp2 = fun(y[i], y[j], p)#     result = fun(temp1, temp2, n)#     if result == 24:##         print("({0}{1}{2}){3}({4}{5}{6})=24".format(y[i], x[n], y[j], x[m], y[k],#                                                     x[p], y[l]))#         temp += 1#         breakelif q == 3:temp1 = fun(y[j], y[k], m)temp1 = fun(temp1, y[l], p)result = fun(y[i], temp1, n)if result == 24:result_list.append("{0}{1}(({2}{3}{4}){5}{6})=24".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))result_list2.append("{0}{1}(({2}{3}{4}){5}{6})".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))# print("{0}{1}(({2}{3}{4}){5}{6})=24".format(y[i], x[n], y[j], x[m], y[k],#                                             x[p], y[l]))temp += 1#breakcontinueelif q == 4:temp1 = fun(y[k], y[l], p)temp1 = fun(y[j], temp1, m)result = fun(y[i], temp1, n)if result == 24:result_list.append("{0}{1}({2}{3}({4}{5}{6}))=24".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))result_list2.append("{0}{1}({2}{3}({4}{5}{6}))".format(y[i], x[n], y[j], x[m], y[k],x[p], y[l]))# print("{0}{1}({2}{3}({4}{5}{6}))=24".format(y[i], x[n], y[j], x[m], y[k],#                                             x[p], y[l]))temp += 1#breakcontinuereturn temp, result_list, result_list2# if temp == 0:#     print("这四张牌无法完成24点游戏")# else:#     print()def timer():"""计时器:return:"""return time.perf_counter()def player():"""玩家进行游戏:return:"""hit_point = 3score = 0print("==================================================")print("==                     24点游戏                  ==")print("==游戏玩家开始时的血量为:{0}                          ==".format(hit_point))print("==游戏玩家开始时的分数为:{0}                          ==".format(score))print("==是否开始游戏:Y or N                             ==")print("==================================================")use = input()while use == 'Y':y = random_number()poker(y)result, result_list, result_list2 = calculate(y)if result == 0:print("这四个数无法完成24点游戏,生命值扣一")hit_point -= 1if hit_point !=0:print("你当前的生命值为:{0}  是否继续:Y/N".format(hit_point))use = input()else:print("生命值为0,游戏结束")break# breakcontinueelif result != 0:print("请玩家输入正确表达式:(A为1,J为11,Q为12,K为13)")# for i in result_list:#     print(i)start_time = timer()player_expression = input()end_time = timer()if end_time-start_time <= 10:if player_expression in result_list2:print("回答正确,加十分")score += 10print("这四张牌所有的组合为:")for i in result_list:print("{0}".format(i))print("是否继续:Y/N")use = input()else:print("回答错误:生命值扣一")hit_point -= 1if hit_point != 0:print("你当前的生命值为:{0} 得分为{1}".format(hit_point, score))print("这四张牌所有的组合为:")for i in result_list:print("{0}".format(i))print("是否继续:Y/N")use = input()else:print("生命值为0,游戏结束")break# print("这四张牌所有的组合为:")# for i in result_list:#     print("{0}".format(i))# print("是否继续:Y/N")# use = input()else:print("未在规定时间内答完,生命值减一")hit_point -= 1print("是否继续:Y/N")use = input()continue# continueprint("你最后的生命值为:{0};最终得分为:{1}".format(hit_point, score))# y = random_number()
# # y = [5,9,3,7]
# x = ['+', '-', '*', '/']
# poker(y)
# calculate(y)x = ['+', '-', '*', '/']
player()

测试

测试的时候出现这个错误:unsupported operand type(s) for +: ‘NoneType’ and ‘int’

将fun()函数进行了修改:

调试

运行程序:出现游戏页面

玩家输入Y进行游戏,这时,会自动生成四张扑克,电脑自动判断这四个数是否可以完成24点游戏,若可以完成,则需要玩家在规定的时间内完成一个表达式的输入,若输入合理,则得10分并输出所有可能的表达式,若输入不合理或者未在规定时间内完成,则扣1点生命值,如果生命值为0或者玩家不继续进行游戏,则游戏结束:



玩家未在规定时间内完成:

第二次测试:

心得体会

在做的过程中,比较难得就是这四个随机数和四个运算符能有多少种排列组合,最后在比较下,使用括号对四个数进行分类比较合适(共四种情况)。
在处理那个异常的情况下,在网上找资源,以及查阅资料,将那个异常解决了,这个是最花费时间的。

Python实现24点游戏相关推荐

  1. Python版24点游戏

    24点游戏是指随机选取4张扑克牌(不包括大小王),然后通过四则运算来构造表达式,如果表达式的值恰好等于24就赢一次.下面的代码定义了一个函数用来测试随机给定的4个数是否符合24点游戏规则,如果符合就输 ...

  2. python编写24点游戏

    1.题目要求 24点游戏是经典的纸牌益智游戏. 常见游戏规则: 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决2 ...

  3. python_用python计算24点游戏

    24点的游戏大家都玩过,这次我们用python来算出四张牌的计算24的方法 def calculates(number, n, result):if n == 1:if number[0] == re ...

  4. 【python】24点游戏算法

    从 1-13 中随机抽出 4 张牌(不允许重复),任意填入运算符"+ .- .\* ./"(分别表示加.减.乘.除),使得计算的结果为 24. 代码: import random ...

  5. python游戏开发步骤_详解Python GUI版24点游戏制作过程

    本文作者为浙江温州永嘉县教师发展中心应根球老师,电子邮箱:ycicada@163.com. 传统用扑克牌算24点游戏用于小学低中段学生训练四则运算效果不错,也可用于防止老年痴呆.本项目模拟传统扑克24 ...

  6. 用python代替人脑运算24点游戏

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:老方玩编程 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  7. 24点游戏python编程代码和运行结果_编程实现24点游戏,我发现自己总是输是有原因的...

    你有玩过24点游戏吗? 两个人轮流从一副扑克牌(不包含鬼牌)中抽牌至有四张手牌为止,利用四张牌上的数字通过加减乘除运算先得出24点的玩家获胜. 一.24点游戏有解的概率 细想一下24点的规则可以发现, ...

  8. 详解Python GUI版24点游戏制作过程

    本文作者为浙江温州永嘉县教师发展中心应根球老师,电子邮箱:ycicada@163.com. 传统用扑克牌算24点游戏用于小学低中段学生训练四则运算效果不错,也可用于防止老年痴呆.本项目模拟传统扑克24 ...

  9. 24点游戏的递归解法和Python实现

    24点游戏的递归解法和Python实现 目录 24点游戏的递归解法和Python实现 什么是24点游戏 递归思路 递归 24点问题的递归思路 Python代码实现 四则运算下无解的组合 总结 什么是2 ...

  10. 基于Python制作的24点游戏生成器

    资源下载地址:https://download.csdn.net/download/sheziqiong/85796930 资源下载地址:https://download.csdn.net/downl ...

最新文章

  1. iOS APP与APP之间的通信方式
  2. 【C/C++】C语言复习笔记-17种小算法-解决实际问题
  3. 初步了解设备IO方式和ReactOS MDL实现
  4. 指定结构体字节对齐方式
  5. JavaScript 精粹 基础 进阶(5)数组
  6. WPS2012交叉引用技巧,word比wps这点强更新參考文献
  7. 只想做程序员的钢铁侠埃隆·马斯克,是如何成为亿万富翁的?
  8. 【SolidWorks、URDF】在SolidWorks里面插入URDF方法步骤以及无法启动的解决问题
  9. Linux命令之find命令
  10. 电动汽车相关功率计算
  11. 再谈微软复兴,纳德拉与库克、马斯克、皮查伊在管理上有什么不同
  12. matlab矩阵里面星号,矩阵中出现加号和星号 什么意思
  13. C语言引用方式调用函数
  14. 2022美国大学生数学建模竞赛C题摘要及总结
  15. “互联网+”环境下高职毕业生求职风险应对策略
  16. 华为OD机试 - 最小调整顺序次数、特异性双端队列
  17. TypeError: argument of type ‘NoneType‘ is not iterable
  18. 一份诚恳的互联网找工作总结和感想(附:怎样花两年时间去面试一个人)
  19. 使用DBeaver连接IRIS数据库
  20. C++ as3 socket服务端

热门文章

  1. 【紫光同创国产FPGA教程】【第九章】HDMI编程测试实验
  2. GIS大数据解决方案
  3. Eason Chan
  4. requests爬取英雄联盟皮肤图片
  5. 户用光伏数字化解决方案
  6. PyQt5自定义图片组件:同时显示多张图片
  7. 华硕主板无盘启动bios设置_华硕主板开机怎么进入bios_华硕主板bios设置U盘启动方法...
  8. Android Studio3.0对于百度地图SDK的开发(基于方向传感器实现手机朝向显示)
  9. R语言教程:什么是R语言,以及如何安装
  10. 牛客-kotori和糖果(哈斯图吗?)