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

 

你可能感兴趣的:(python)