今天玩24点的时候,突然希望想编写一个 计算24点的小程序,为python的初学者提供一些帮助。
24点是许多人都会玩的游戏。玩法在这里简单的介绍一下:选4个数字(1-13中任意),然后用加减乘除算出24。计算时,四个数字不能重复使用也不能少用。
看似非常简单的24点游戏,为计算出24点,常常需要大量的计算,而这又具有一些规律性,符合编程的条件。因此,博主做了一个简单的24点小程序,在这里与大家分享一下,希望对大家有所帮助。
首先,24点有1820种情况,需要编写一个函数来生成1820种情况。这里使用了循环嵌套的技巧,比较简单,在此不作赘述。
'''这个函数排列出1820种24点排列(1-13)'''
def numbers_1820():kinds = [] #这个列表用来储存1820种24点排列# 24点有4个数字,每个数字有十三种(1-13),记为n1,n2,n3和n4。for n1 in range(1,14):for n2 in range(1,14):for n3 in range(1,14):for n4 in range(1,14):if n1 <= n2 <= n3 <= n4: #保证不重复,不遗漏number_list = [n1,n2,n3,n4] #每一种4个数字的列表kinds.append(number_list) #添加入最终列表return kinds
为方便后续的计算,还需编写一个将4个数字排列成24种的函数(例如[1,2,3,4]要排列成[1,2,3,4],[1,2,4,3],[1,3,2,4]等)。
'''这个函数将24点的每一种(例如[1,2,3,4])进行24种排列'''
def kinds_24(kind):result= []all_result = []for a in range(0,4):for b in range(0,4):for c in range(0,4):for d in range(0,4):if a != b and a != c and a != d and b != c \and b != d and c != d: #4个数字不能有相同的a1 = kind[a]b1 = kind[b]c1 = kind[c]d1 = kind[d]result = [a1,b1,c1,d1]all_result.append(result)return all_result
最后需要编写的函数是计算所给的24点。首先要在4个数字中插入3个符号(共4*4*4=64种),然后还要加上5种括号,进行计算已得到有解或无解的结果。
'''把给到的4个数进行暴力计算法算24.'''
def caculate_24(lists):result = 0symbols = ['+','-','*','/'] #4个数中间会有3个符号a,b,c,d = lists #将4个数赋值给a,b,c,d。# 三个符号分别为s1,s2和s3。for s1 in range(0,4):for s2 in range(0,4):for s3 in range(0,4):#这里是5种括号。for k1 in range(1,6):if k1 == 1:math = f'({a}{symbols[s1]}({b}{symbols[s2]}{c})){symbols[s3]}{d}'#1elif k1 == 2:math = f'(({a}{symbols[s1]}{b}){symbols[s2]}{c}){symbols[s3]}{d}'#2elif k1 == 3:math = f'({a}{symbols[s1]}{b}){symbols[s2]}({c}{symbols[s3]}{d})'#3elif k1 == 4:math = f'{a}{symbols[s1]}({b}{symbols[s2]}({c}{symbols[s3]}{d}))'#4elif k1 == 5:math = f'{a}{symbols[s1]}(({b}{symbols[s2]}{c}){symbols[s3]}{d})'#5try:if 23.999999995 < float(eval(math)) < 24.000000005:#近似值result += 1 #有解个数是resultexcept ZeroDivisionError: #除以0passif result != 0: #非无解return Trueelse: #无解return False
最后将几个函数和在一条主程序里面,以生成24点的有无解表。
由于最后的需要操作Excel,需安装第三方模块xlwt,可打开Windows文件资源管理器,输入这个路径:C:\Users\ASUS\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell,打开WindowsPowershell,运行这条命令:pip install --user xlwt ,即可安装完成。
以下是最后主程序的脚本:
# 导入函数
from Numbers_1820 import numbers_1820
from Kinds_24 import kinds_24
from Caculate_24 import caculate_24
import xlwtresult = []
list_1820 = numbers_1820() #首先获取24点的1820种排列for i in list_1820:#遍历列表youjie = 0list_24 = kinds_24(i)#将1820种的每一种进行24种排列for a in list_24: #遍历24种情况# 开始计算if caculate_24(a) == True:#有解youjie += 1if youjie > 0:#有解result.append([i,'有解'])#加入最后的总列表else:#无解result.append([i,'无解'])#同理'''将结果写入一个Excel表'''
wbk = xlwt.Workbook() #创建一个新Excel
sheet = wbk.add_sheet('24点有无解表') #增加一个sheet
h = 0
# 开始写入
for b in result:sheet.write(h,0,str(b[0]))sheet.write(h,1,b[1])h += 1
wbk.save('24点表.xlsx') #保存
print('Done.')#完成
注意:将子程序与主程序放置于同一个文件夹里。
最后的Excel表展示:

调整后:

今天的文章到此就结束了,希望我的文章对大家有帮助!














