Python写的计算24点小游戏
最近在学习PHP & Python,@hongqn 在他的《Python 于Web 2.0网站的应用》中提到了Python的哲学,我想这个应该就是我一直在寻找的吧。于是花了一下午在优酷上看完了《Python.Django视频教程-台湾辅仁大》的视频教程专辑,开始了写个Python小游戏的计划。
系统是Mac OS X Snow Leopard,结果装了个Xcode 3.1,啥东东都编译不了,很多python setup.py install都安装不通过。后来才知道雪豹必须装Xcode3.2+才行。
以下是我边写边学的python计算24点小游戏。求解24点算法那块我实在是没啥头绪,就这么悲剧的放着吧,毕竟这块不是我写这个小游戏的初衷。网上查了一些算法,不是错的就是用啥穷举的方法。通过写这个小游戏,我学会了以下一些内容:
1、dictionary的操作,’i’ in dict返回True or False
2、list的操作,list.append()、”.join(list)、list.sort()
3、整型随机数生成,random.randint()
4、正则表达式,re.match()、
5、字符操作,替换 string.replace()、大小转换string.upper()
6、eval()语句的用法及其安全性问题
7、类型转换,int(str)、str(int)
8、程序执行时传入自定义参数的方法,for argv in sys.argv
9、判断当前运行程序是否为其本身 __name__==’__main__’
10、指定程序字符编码encoding: utf-8 放在第一行注释中
除以上几点外,程序中用到的其他语句有:import、循环、字符串拼接、print多行。
代码展示:
# Code by yekai.net, encoding: utf-8 import random import re import sys nums = [] poker = False def conver2Cards(nums): cards = [] cardDict = {'1':'A','11':'J','12':'Q','13':'K'} for i in nums: if poker and str(i) in cardDict: cards.append(cardDict[str(i)]) else: cards.append(str(i)) return cards def getCards(): newnums = [] global nums for i in range(4): newnums.append(random.randint(1,13)) nums = newnums; return conver2Cards(newnums) def getAnswer(nums): for i in nums: return ''.join(str(nums)) + '\n抱歉,24点算法我写不出来,请指教:http://yekai.net/?p=217' def calc(exp): match = re.match('^\(?[0-9]{1,2}[-+*/]{1}\(?[0-9]{1,2}\)?[-+*/]{1}\(?[0-9]{1,2}\)?[-+*/]{1}[0-9]{1,2}\)?$',exp) if match: inputnums = re.split('[-+*/()]+',exp.replace('(','').replace(')','')) inputnums = [int(i) for i in inputnums] inputnums.sort() if nums != inputnums: return -1 if eval(exp) == 24: return 1 else: return 0 else: return -2 def newGame(): running = True print '-------------------\nCards: ' +' '.join(getCards()) + '\n' nums.sort() while True: x = raw_input('Input Your Answer:').upper() if x == 'Q': running = False print 'Game Over, bye~\n' break elif x == 'K': print('Answer:' + getAnswer(nums)) break elif x == '': continue else: x = x.replace('A','1').replace('J','11').replace('Q','12').replace('K','13') y = calc(x) if(y == -2): print 'Please Input Correct Format,el: (2+6)*(5-2)' elif(y == -1): print 'Please use the given cards!' elif(y == 0): print 'ERROR:'+ x +'='+ str(eval(x)) + '\nPlease Try Again:)' else: print 'CORRECT!' break if running: newGame() else: sys.exit() if __name__=='__main__': for argv in sys.argv: if(argv == 'poker=on'):poker = True print """ ======Welcome to calc24 game====== Notes: [Q] Exit Game [K] Get Answer Poker Mode: poker=on """ newGame()
下载源文件:calc24.py