1.题目要求
24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。
提高要求:用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。
1. 程序风格良好(使用自定义注释模板)
2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。
3.所有成绩均可记录在TopList.txt文件中。
二、算法设计
24点游戏,一共使用52张牌,4种花色,因此使用13张不同数字和字母的扑克即可。
2.算法设计
基本要求:
(1)抽牌阶段:将13张牌的数值和字母存入列表中,并给字母赋特定的值,random.choice()从列表中随机选取元素,利用此函数和for语句组成列表推导式,随机拿出4个数,模拟抽取4张牌。
(2)计算阶段:利用itertools.permutations()函数对随机出来的4个数进行全排列,可替代用4次for语句进行排列,同时更好的解决了排列组合的元素重复性问题,将所有可能性存在列表list(i)中;利用 itertools.product ()函数对运算符也进行全排列,每个运算符可重复,在运算过程中只需要用3个运算符,在存入列表之后将最后一个删去即可,将所有可能性存在列表list(j)中;利用for语句将4个数字和3个运算符进行排列组合,将表达式转化成字符串,利用eval()对字符串进行求值,利用try和except将计算中的异常(除数为0)忽略。将值为24的所有表达式输出。
提高要求:
(1)抽牌阶段:将13张牌的数值和字母存入列表中,并给字母赋特定的值,random.choice()从列表中随机选取元素,利用此函数和for语句组成列表推导式,随机拿出4个数,模拟抽取4张牌。
(2)计算阶段:输入自己计算的表达式,然后将表达式转化成字符串,利用eval()对字符串进行求值,使用for循环判断值是否为24,若不等于24,n-1,score不变,否则n不变,score+1。若n为零,退出循环,并输出游戏结束,将成绩通过T.write写入TopList.txt文件中。

3.概要设计
(1)计算24点

(2)24点积分游戏

4.代码展示

def calculate():card = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']A = 1  J = 11Q = 12K = 13operator = ['+', '-', '*', '/']       #运算符list_four =[random.choice(card) for i in range(4)]  #随机取出4张牌print("你获得以下四张牌:")print(list_four)        #输出四张牌的值result_four = []          #列表储存四张牌全排列# set() 去除重复的排列for i in set(itertools.permutations(list_four, len(list_four))):    #生成全排列的各个组合result_four.append(list(i))result_operator = []     #列表存储四个运算符for j in set(itertools.product(operator,repeat= 4)):templist = list(j)templist.pop()    #在实际运算过程中,只需要3个运算符,所以删掉最后一个运算符,保留3个运算符if templist not in result_operator:result_operator.append(templist)list_expression = []    #存放各个符合条件的表达式count = 0            for i in result_four:for j in result_operator:expression1 = str(i[0]) + j[0] + str(i[1]) + j[1] + str(i[2]) + j[2] + str(i[3])    #将所有数都转化为str类型result = eval(expression1)if result == 24:list_expression.append(expression1 + '=24')count += 1else:expression2 = '(' + str(i[0]) + j[0] + str(i[1]) + ')' + j[1] + str(i[2]) + j[2] + str(i[3])result = eval(expression2)if result == 24:list_expression.append(expression2 + '=24')count += 1else:expression3 = str(i[0]) + j[0] + '(' + str(i[1]) + j[1] + str(i[2]) + ')' + j[2] + str(i[3]):result = eval(expression3)if result == 24:list_expression.append(expression3 + '=24')count += 1else:expression4 = str(i[0]) + j[0] + str(i[1]) + j[1] + '(' + str(i[2]) + j[2] + str(i[3]) + ')'result = eval(expression4) if result == 24:list_expression.append(expression4 + '=24')count += 1           #计算结果为24则计数+1print("结果如下:")for each in list_expression:print(each)                print('一共有%d个表达式' % count)
def playgame():n = 3print("共有%d次机会"%n)score = 0while (n > 0):print("当前得分为%d"%score)card = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']A = 1J = 11Q = 12K = 13list_four = [random.choice(card) for i in range(4)]        #随机抽取四张牌print(list_four)str_result = str(input("请将上述四张扑克牌的点数计算成24点(请输入表达式):"))if eval(str_result) != 24:n -= 1         # 回答错误生命值-1if n == 0:print("生命值已经用完,游戏结束!")str_name = input("请输入您的姓名,结果将存入排行榜:")T = open('TopList.txt','a')T.write(str_name)T.write("\t")T.write(str(score))T.write("\n")breakelse:print(str_result + "=", end="")print(eval(str_result))print("回答错误,您还剩%d条命,请继续您继续游戏"%n)else:score += 1print("回答正确,得分+1,请继续游戏")
sign = 0
while(sign==0):print("请选择您要进行操作的序号:")print("1.24点计算器")print("2.进行24点小游戏")print("3.退出程序")flag = int(input())if flag == 1:calculate()sign = 0elif flag == 2:playgame()sign = 0elif flag == 3:sign = 1else:sign = 0

5.结果展示



6.总结
通过本次编程,了解了很多python中功能强大的库,更好的解决了本次程序中的问题,我是第一次真正使用这些,需要考虑到的问题很多,不断的调试最后得到正确的结果。同时体会到了程序结构对程序功能的影响,在对数字进行排列组合的时候,不能通过多重循环得到所有所需结果,通过查询资料了解到了itertools库可直接对结果进行各种想要的排列组合形式。通过这次作业,我收获到了很多有用的知识,与此同时也发现自己的很多不足之处,基础知识掌握不牢固,不能学以致用,还需要对常用的库进行更多了解。

python编写24点游戏相关推荐

  1. Python编写尼姆游戏

    Python编写尼姆游戏 最主要的思想是要构建函数思想.就是要将玩家和电脑分模块给编写出来.玩家可以编写比较简单不多赘述.这里主要讲一讲电脑模块.首先我们要保证电脑拿走物品剩下来过后要是2∧n-1如果 ...

  2. 用python编写乒乓球小游戏--Turtle功能的应用

    用python编写乒乓球小游戏–Turtle功能的应用 python有很多功能强大的代码库,Turtle是一款用于游戏开发的代码库.通过编写乒乓球小游戏可以了解这个库的基本的代码的使用 先创建游戏的背 ...

  3. python编写猜数字游戏

    一.猜数字游戏介绍 猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩. 二.猜数字游戏规则 先解释标 ...

  4. Python 编写石头剪刀布小游戏

    Python 编写石头剪刀布小游戏 一个简单的小游戏 程序只运行一次 每次出拳一次要运行一次,很麻烦,要让程序一直运行 长期玩游戏不利于身心健康,玩游戏要有度不是 免费玩了这么多次,要给项目创造一点收 ...

  5. Python版24点游戏

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

  6. Python编写带音效游戏——击球打玻璃块

    Python编写游戏的环境搭建和编写过程已在上篇"Python编写游戏--拼图游戏"中进行了介绍,在此基础上本篇再介绍键盘控制.背景图像设置和音效设置. 一.开发工具 Python ...

  7. python编写猜大小游戏_python编写猜数字小游戏

    本文实例为大家分享了python编写猜数字小游戏的具体代码,供大家参考,具体内容如下 import random secret = random.randint(1,30) guess = 0 tri ...

  8. 如何使用Python编写简单的游戏?

    14天阅读挑战赛 今天,我们将学习如何使用几个常见的Python模块在Python中编写一些简单的游戏. 我们为什么要使用Python? Python是一种著名的编程语言.Python非常易于理解和编 ...

  9. python编写猜数游戏代码、如果不是整数、显示输入错误_数字炸弹游戏程序 用python来实现...

    相信许多小伙伴都玩过数字炸弹游戏,就是指在一定数字范围(一般是整数,不包含边界)里,一个玩家选中一个数字当作炸弹,其余玩家在这个范围含数字,每次只要没猜中炸弹数字,则根据玩家猜的数字缩小范围,直至其中 ...

最新文章

  1. 关于java环境配置问题
  2. golang 读取文件
  3. 图像矫正与车牌识别资料整理
  4. 暂停和播放CSS3动画的两种实现方法
  5. 写了一个 SSO 单点登录的代码示例给胖友!
  6. 1. 根据输出的数据,对各个阶维度的反推+2.tf中生成根据指定的shape,tensor的各个阶的维度判断
  7. Sqoop2开启Kerberos安全模式
  8. ambassador 学习七 Mapping说明
  9. 实战weblogic集群之创建节点和集群
  10. linux 重启服务器_linux入门-----6
  11. Vue学习笔记之15-vue-router详解
  12. CODE ---代码助手 (保存代码、搜代码、生成网页、自由界面)
  13. IEC61850——开山篇
  14. DELL强化版《最终幻想11》认证电脑出炉
  15. linux内存管理笔记(三十四)----匿名映射
  16. 自动驾驶仿真软件SCANeR studio(三)terrain地形模式
  17. ubuntu文件系统字体底纹含义
  18. 物联网与大数据(三)从大数据看物联网
  19. 解决虚拟机打不开Ubuntu的问题:
  20. UAP:SECURITY PROTOCOL IN/OUT Command

热门文章

  1. 漂亮的后台模版|50个漂亮的后台管理界面模板
  2. 数据结构之Hash树
  3. ibm 服务器主板坏掉硬盘数据恢复,RAID损坏后 对数据的完整备份
  4. cad坐标归零lisp_批量除一个数的lisp,请高手改成保留成设置小数位置。
  5. 欧拉工程第三题 找出一个合数的最大质数因子
  6. php的getopt函数,PHP 中 getopt 函数的用法
  7. IntelliJ IDEA 目录
  8. 高斯信号和非高斯信号中偏斜度和峭度的问题
  9. pytorch模型推理提速
  10. python 的plotly.express 如何修改默认渐变色