习题里比较有意思的一个题目,实现石头剪刀布这个游戏,起初设计的时候走弯路了(主要时被习题里那个“尽量少用if判断”给整晕了),想的太复杂,后来发现其实非常简单,完全可以不写if语句。
还是枚举法:
#! /usr/bin/env python
import random
choicetuple = ('rock','scissors','paper')
#枚举所有的比较结果,格式定义为{‘玩家-电脑’:‘结果’}
judgedict = {'rock-rock':'OK!Draw!','scissors-scissors':'OK!Draw!','paper-paper':'OK!Draw!','rock-scissors':'OK!You Win!', 'rock-paper':'HAHA!You lose!', 'scissors-rock':'HAHA!You lose!', 'scissors-paper':'OK!You Win!', 'paper-rock':'OK!You Win!', 'paper-scissors':'HAHA!You lose!'}
def rockscissorspaper(playerchoice, randomchoice):
newstr = playerchoice+'-'+randomchoice
#get内建函数是亮点,因为我之前用的是try expect这种傻乎乎的东西,看到第7章的内容,果断用get()
return judgedict.get(newstr, 'Computer is played badly!')
if __name__ == '__main__':
print('rock!!scissors!!paper!!')
while True:
playerchoice = input('COME ON!SHOW ME YOUR HAND STYLE:')
randomchoice = choicetuple[random.randint(0,len(choicetuple)-1)]
print('Eat this:%s'% randomchoice)
resultstr = rockscissorspaper(playerchoice, randomchoice)
print(resultstr)
这个玩法正常情况下,玩家想赢电脑,概率是三分之一(平局当然不算赢),但是,这么玩游戏也太没劲了,胜利得来太容易啊!
玩游戏果断得有VIP(RMB)玩家和平民玩家之分啊!VIP0~9,9级VIP,赢的概率是3分之一,依次往下推,0级VIP,赢主要看脸!
怎么实现呢?嘿嘿,有兴趣的同学可以试一哈!