kaiye

最近在学习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

 

分类:

技术点:

相关文章:

  • 2021-10-18
  • 2021-11-03
  • 2021-11-03
  • 2021-11-03
猜你喜欢
  • 2021-11-03
  • 2021-05-10
  • 2021-11-03
  • 2021-11-03
  • 2021-11-03
  • 2021-11-13
  • 2021-10-20
相关资源
相似解决方案