Python实现24点游戏

article/2025/10/24 6:42:49

问题描述

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或者玩家不继续进行游戏,则游戏结束:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
玩家未在规定时间内完成:
在这里插入图片描述
第二次测试:
在这里插入图片描述
在这里插入图片描述

心得体会

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


http://chatgpt.dhexx.cn/article/vBurxngc.shtml

相关文章

用python算24点及原理详解

1 描述 给出4个正整数&#xff0c;使用加、减、乘、除4种运算以及括号把4个数连接起来得到一个结果等于24的表达式。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬…

24点卡牌游戏C++实现

问题描述&#xff1a; 24点游戏是经典的纸牌益智游戏。 常见游戏规则&#xff1a; 从扑克中每次取出4张牌。使用加减乘除&#xff0c;第一个能得出24者为赢。&#xff08;其中&#xff0c;J代表11&#xff0c;Q代表12&#xff0c;K代表13&#xff0c;A代表1&#xff09;&#x…

Python 小程序:计算24点

今天玩24点的时候&#xff0c;突然希望想编写一个 计算24点的小程序&#xff0c;为python的初学者提供一些帮助。 24点是许多人都会玩的游戏。玩法在这里简单的介绍一下&#xff1a;选4个数字&#xff08;1-13中任意&#xff09;&#xff0c;然后用加减乘除算出24。计算时&…

24点答案生成器

故事背景&#xff1a;晚上拿起扑克牌&#xff0c;奈何没有牌友&#xff0c;百度了一下有什么单人扑克游戏&#xff0c;然后就发现了24点&#xff0c;随意挑出4张牌&#xff0c;只用加减乘除组合成24点&#xff0c;我抽出了7 7 8 Q(12) &#xff0c;然后思索了半天没有答案&…

蓝桥杯 试题 算法训练 24点 C++ 详解

问题描述&#xff1a; 24点游戏是一个非常有意思的游戏&#xff0c;很流行&#xff0c;玩法很简单&#xff1a;给你4张牌&#xff0c;每张牌上有数字&#xff08;其中A代表1&#xff0c;J代表11&#xff0c;Q代表12&#xff0c;K代表13&#xff09;&#xff0c;你可以利用数学中…

24点游戏(python)

24点游戏&#xff08;python&#xff09; 一、题目要求 1.问题描述&#xff1a; 24点游戏是经典的纸牌益智游戏。常见游戏规则&#xff1a; 从扑克中每次取出4张牌。使用加减乘除&#xff0c;第一个能得出24者为赢。&#xff08;其中&#xff0c;J代表11&#xff0c;Q代表12&a…

用java实现24点游戏

前言 用java实现24点游戏 Welocome to Xiang’s world~ 题目ღ( &#xff65;ᴗ&#xff65; ) 24点游戏是经典的纸牌益智游戏。 常见游戏规则&#xff1a; 从扑克中每次取出4张牌。使用加减乘除&#xff0c;第一个能得出24者为赢。&#xff08;其中&#xff0c;J代表11&am…

C++ 实现计算24点

原理 暴力枚举所有的情况&#xff0c;运算符号4个&#xff0c;加减乘除 - * / &#xff0c;整数数字4个&#xff08;易扩展为5个数或者更多&#xff09;。所需要枚举的次数&#xff1a; 数字顺序&#xff1a;4个数的全排列&#xff0c;4! 24。运算符号&#xff1a;4个数需要…

计算机上的24点游戏怎么玩,趣味算数二十四点游戏规则怎么玩技巧

概述&#xff1a;这是一个算数游戏&#xff0c;用四张牌计算得出24。 时间&#xff1a;20分钟 人数&#xff1a;集体参与 目的&#xff1a;锻炼学员的快速计算能力。 道具&#xff1a;扑克牌 步骤&#xff1a; 1.去点大小王&#xff0c;“K”计13点&#xff0c;“Q”计12点&…

【编程|二十四点】关于编程解决二十四点的两种思路

【编程心得系列*24点】 写在前面&#xff1a;编程心得系列不谈具体问题的代码&#xff0c;只谈解决思路。 这是一个关于二十四点的软件。属于典型的先有目的再有初衷的软件。 在此之前我倒是写过一个解数独的软件。但那个的核心代码部分毕竟是抄袭的。这次是觉得对自己更有信…

计算机二十四点游戏怎么玩,扑克牌二十四点怎么玩?扑克牌二十四点游戏规则介绍...

扑克牌二十四点是在国际上很流行的一种扑克游戏玩法&#xff0c;因为游戏计算性较强&#xff0c;较为考验的玩家的心算能力&#xff0c;所以很受扑克玩家的喜爱&#xff0c;那么扑克牌二十四点到底是怎么玩的呢&#xff1f;扑克牌二十四点的游戏规则又是什么呢&#xff1f;下面…

CCF计算机软件能力认证试题练习:201903-2 二十四点

二十四点 来源&#xff1a;CCF 标签&#xff1a; 参考资料&#xff1a; 相似题目&#xff1a; 背景 二十四点是一款著名的纸牌游戏&#xff0c;其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24。 题目 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运…

asdasdas

asdasdasdsadassad 阅读全文: http://gitbook.cn/gitchat/activity/5d634f8c5cbc425420e0e72f 您还可以下载 CSDN 旗下精品原创内容社区 GitChat App &#xff0c;阅读更多 GitChat 专享技术内容哦。

dsada

图2.2 www.sina.com网站系统采用的基本上就是图2.2所示的架构&#xff0c;不同地区的人们在访问www.sina.com站点时&#xff0c;浏览器实际上所访问的服务器是不一样的&#xff0c;例如&#xff0c;吉林省的用户访问的服务器实际是sina放在吉林地区的代理服务器&#xff0c;湖北…

Asdasd

这里写阿阿萨德斯达四大自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义…

dsa-基础

算法与数据结构 0.概念数据结构复杂度时间复杂度空间复杂度 1. 线性表顺序表(数组)链表单链表双链表循环链表静态链表 顺序表/链表栈顺序栈链式栈 队列顺序循环队列链表队列双端队列 2. 递归递归与栈阶乘例子 3. 矩阵对称矩阵三角矩阵稀疏矩阵 4. 字符串 0.概念 数据结构 逻辑…

dsadas

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

DSDA 简介

参考link&#xff1a;千呼万唤&#xff0c;5G双卡双通到底有多重要&#xff1f;__财经头条 (sina.com.cn)