Python 编写24点游戏
想起小时候玩的 24 点,还真是难忘。那时候两个人,或者四个人,有沉思、有爆发、也有放弃、或者不甘,还有装模作样、有说有笑,乐趣无穷啊。可惜,现在只有对着电脑写程序来满足一下了。。
下面这个这个是以前写的一个24点小游戏,那些变量名,程序的可读性,等等,有点,不说了,照搬,还原以前的我!
运行效果:
(24点)
请输入a:5
请输入b:5
请输入c:5
请输入d:1
(5-(1/5))*5Process finished with exit code 0
设计思路:
数学感觉一下,容易证明 24 点的计算式可以用以下两种方式囊括(其中 ⊕ 表示加减乘除这四种运算符号):
((a⊕b)⊕c)⊕d
(a⊕b)⊕(c⊕d)
现在,我们只需要把四个数全排列,再配以可能的运算符号便可以了。这里不用考虑括号的放置,因为上面那两个式子已经把括号固定了
完整代码:
#!/usr/bin/env python
#-*- coding:utf-8 -*-import itertools
three, three1 = None, Nonedef cal():global three, three1flag = 1print('(24点)')x = int(input('请输入a:')), int(input('请输入b:')), int(input('请输入c:')), int(input('请输入d:'))L = list(x) ## tuple --> list ,即 [a,b,c,d]while (flag == 1):if L[0] <= 0 or L[1] <= 0 or L[2] <= 0 or L[3] <= 0:print('\n输入值不全是正数,请重新输入...')x = int(input('请输入a:')), int(input('请输入b:')), int(input('请输入c:')), int(input('请输入d:'))L = list(x)else:flag = 0L1 = itertools.permutations(L) ## 全排列for i in L1: ## 下面是实现 ((a⊕b)⊕c)⊕d 的形式 a, b, c, d = ilist1 = [a + b, a - b, b - a, a * b, a / b, b / a]#list2 = [c + d, c - d, d - c, c * d, c / d, d / c]for result1 in list1:if result1 == 0:list2 = [result1 + c, result1 - c, c - result1, result1 * c, result1 / c]else:list2 = [result1 + c, result1 - c, c - result1, result1 * c, result1 / c, c / result1]for result2 in list2:if result2 == 0:list3 = [result2 + d, result2 - d, d - result2, result2 * d, result2 / d]else:list3 = [result2 + d, result2 - d, d - result2, result2 * d, result2 / d, d / result2]for result3 in list3:if abs(result3 - 24) < 1e-10: c1 = list1.index(result1)c2 = list2.index(result2)c3 = list3.index(result3)if c1 == 2 or c1 == 5:a, b = b, afirst = '(' + str(a) + four[c1] + str(b) + ')'if c2 == 2 or c2 == 5:first, c = c, firstsecond = '(' + str(first) + four[c2] + str(c) + ')'if c3 == 2 or c3 == 5:second, d = d, secondthree = str(second) + four[c3] + str(d)print(three + '\n')breakif abs(result3 - 24) < 1e-10:breakif abs(result3 - 24) < 1e-10:breakif abs(result3 - 24) < 1e-10:breakif three == None: ## 下面是实现 (a⊕b)⊕(c⊕d) 的形式 L1 = itertools.permutations(L) for i in L1:a, b, c, d = ilist1 = [a + b, a - b, a * b, a / b]list2 = [c + d, c - d, c * d, c / d]for result1 in list1:for result2 in list2:if result2 == 0:list3 = [result1 + result2, result1 - result2, result1 * result2]else:list3 = [result1 + result2, result1 - result2, result1 * result2, result1 / result2]for result3 in list3:if abs(result3 - 24) < 1e-10:c1 = list1.index(result1)c2 = list2.index(result2)c3 = list3.index(result3)three1 = '(' + str(a) + four1[c1] + str(b) + ')' + four1[c3] + '(' + str(c) + \four1[c2] + str(d) + ')'print(three1 + '\n')breakif abs(result3 - 24) < 1e-10:breakif abs(result3 - 24) < 1e-10:breakif abs(result3 - 24) < 1e-10:breakif three == None and three1 == None:print('无解...')if __name__ == '__main__':four = ['+', '-', '-', '*', '/', '/']four1 = ['+', '-', '*', '/']cal()
注意点与总结点:
全排列,生成器
除数不能为0
浮点数
0.1
在计算机中就无法精确表示,因为十进制的0.1
换算成二进制是一个无限循环小数
改进之处:
- 变量命名
- 参数变量与方法的分离不当,比如 four 和 four1 变量,应该写进函数里面,控制变量的最小范围!
- 可以把上面的 cal 函数分为三个子函数来写,会方便一点
- 里面的字符串拼接可以改用
format
- 判断输入的值,可用正则表达式来判断输入是否非法,输入非法则重新输入
练习:
- 改进之处 那里的完善
- 分两种模式,一种为自己输入4个数字求解,一种为计算机给出4个数,让我们算。可以一直玩下去,除非我们选择退出
- 第一种模式中,把可能的 24 点运算全部罗列出来
- 除了上面代码所用的最传统的方法,还可以用Python自带库或者二叉树等等完成
Python 编写24点游戏相关推荐
- python编写24点游戏
1.题目要求 24点游戏是经典的纸牌益智游戏. 常见游戏规则: 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决2 ...
- Python编写尼姆游戏
Python编写尼姆游戏 最主要的思想是要构建函数思想.就是要将玩家和电脑分模块给编写出来.玩家可以编写比较简单不多赘述.这里主要讲一讲电脑模块.首先我们要保证电脑拿走物品剩下来过后要是2∧n-1如果 ...
- 用python编写乒乓球小游戏--Turtle功能的应用
用python编写乒乓球小游戏–Turtle功能的应用 python有很多功能强大的代码库,Turtle是一款用于游戏开发的代码库.通过编写乒乓球小游戏可以了解这个库的基本的代码的使用 先创建游戏的背 ...
- python编写猜数字游戏
一.猜数字游戏介绍 猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩. 二.猜数字游戏规则 先解释标 ...
- Python 编写石头剪刀布小游戏
Python 编写石头剪刀布小游戏 一个简单的小游戏 程序只运行一次 每次出拳一次要运行一次,很麻烦,要让程序一直运行 长期玩游戏不利于身心健康,玩游戏要有度不是 免费玩了这么多次,要给项目创造一点收 ...
- Python版24点游戏
24点游戏是指随机选取4张扑克牌(不包括大小王),然后通过四则运算来构造表达式,如果表达式的值恰好等于24就赢一次.下面的代码定义了一个函数用来测试随机给定的4个数是否符合24点游戏规则,如果符合就输 ...
- Python编写带音效游戏——击球打玻璃块
Python编写游戏的环境搭建和编写过程已在上篇"Python编写游戏--拼图游戏"中进行了介绍,在此基础上本篇再介绍键盘控制.背景图像设置和音效设置. 一.开发工具 Python ...
- python编写猜大小游戏_python编写猜数字小游戏
本文实例为大家分享了python编写猜数字小游戏的具体代码,供大家参考,具体内容如下 import random secret = random.randint(1,30) guess = 0 tri ...
- 如何使用Python编写简单的游戏?
14天阅读挑战赛 今天,我们将学习如何使用几个常见的Python模块在Python中编写一些简单的游戏. 我们为什么要使用Python? Python是一种著名的编程语言.Python非常易于理解和编 ...
- python编写猜数游戏代码、如果不是整数、显示输入错误_数字炸弹游戏程序 用python来实现...
相信许多小伙伴都玩过数字炸弹游戏,就是指在一定数字范围(一般是整数,不包含边界)里,一个玩家选中一个数字当作炸弹,其余玩家在这个范围含数字,每次只要没猜中炸弹数字,则根据玩家猜的数字缩小范围,直至其中 ...
最新文章
- 单链表-删除并释放以L为表头指针的单链表的所有结点(双指针法)
- u-boot分析之启动简介(一)
- Uva 11922 Splay
- C++11 POD类型
- 我的docker随笔13:docker源码编译进阶篇
- Linux0.11 kernel/exit.c中的free_page_tables()
- AWT_Swing_初始化(Java)
- Python 系统管理利器Fabric
- bootstrap页面布局
- OmegaXYZ知识图谱应用Github仓库(长期更新)
- Sofia-SIP辅助文档六 - Sofia-SIP中的SIP和SDP特性
- 使用SpringBoot做一个班级管理系统
- LaserJet 5000 及 5100 系列打印机出现 pcl xl error 怎么办
- android投屏 电视软件,高清电视投屏软件下载-高清电视投屏 安卓版v20200802-PC6安卓网...
- ChucK初步(1)
- wps批量将文档括号内的字符串修改颜色
- 系统架构师论文-论软件设计模式的应用
- 看完这五个问题后你真的了解C语言吗?(深度剖析C语言第二期)
- 学习同学们的博客经验
- 百余门店闭门谢客,韩妆如何败给了国潮?