算24点游戏源代码python_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

importrandomimportreimportsys

nums=[]

poker=Falsedefconver2Cards(nums):

cards=[]

cardDict= {'1':'A','11':'J','12':'Q','13':'K'}for i innums:if poker and str(i) incardDict:

cards.append(cardDict[str(i)])else:

cards.append(str(i))returncardsdefgetCards():

newnums=[]globalnumsfor i in range(4):

newnums.append(random.randint(1,13))

nums=newnums;returnconver2Cards(newnums)defgetAnswer(nums):for i innums:return ''.join(str(nums)) + '\n抱歉,24点算法我写不出来,请指教:http://yekai.net/?p=217'

defcalc(exp):

match= re.match('^\(?[0-9]{1,2}[-+*/]{1}\(?[0-9]{1,2}\)?[-+*/]{1}\(?[0-9]{1,2}\)?[-+*/]{1}[0-9]{1,2}\)?$',exp)ifmatch:

inputnums= re.split('[-+*/()]+',exp.replace('(','').replace(')',''))

inputnums= [int(i) for i ininputnums]

inputnums.sort()if nums != inputnums: return -1

if eval(exp) == 24:return 1

else:return0else:return -2

defnewGame():

running=Trueprint '-------------------\nCards:' +' '.join(getCards()) + '\n'nums.sort()whileTrue:

x= raw_input('Input Your Answer:').upper()if x == 'Q':

running=Falseprint '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

ifrunning:

newGame()else:

sys.exit()if __name__=='__main__':for argv insys.argv:if(argv == 'poker=on'):poker =Trueprint """======Welcome to calc24 game======

Notes:

[Q] Exit Game

[K] Get Answer

Poker Mode: poker=on"""newGame()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值