总项目目标:用面向过程思想设计一个简单的纸牌游戏程序,称为"Higher or Lower"(高还是低)。游戏中,玩家需要猜测接下来的一张牌是比当前牌高还是低。根据猜测的准确性,玩家可以得到或失去相应的积分。为后续对比面向对象编程思想做准备。
项目1.3 洗牌与抽牌
import random
SUIT_TUPLE = ('黑桃', '红心', '梅花', '方块')
RANK_TUPLE = ('A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K')
def shuffle(deckListIn):
deckListOut = deckListIn.copy() # 生成一副牌的副本
random.shuffle(deckListOut) # 洗牌
return deckListOut
def getCard(deckListIn):
thisCard = deckListIn.pop() # 从牌组中取最后一张牌
return thisCard
startingDeckList = []
for suit in SUIT_TUPLE:
for thisValue, rank in enumerate(RANK_TUPLE):
cardDict = {'rank': rank, 'suit': suit, 'value': thisValue + 1}
startingDeckList.append(cardDict)
gameDeckList = shuffle(startingDeckList)
currentCardDict = getCard(gameDeckList)
print(gameDeckList)
print(currentCardDict)
效果如下:
程序分析:
程序包含了洗牌和抽牌操作,用于模拟一副牌的洗牌和抽取过程。
代码导入了random
模块,shuffle()
函数接受一个牌组列表作为参数,首先使用copy()
方法生成牌组的副本deckListOut
,然后使用random.shuffle()
函数对副本进行洗牌操作,打乱牌组顺序。最后,函数返回洗牌后的牌组副本deckListOut
。
getCard()
函数接受一个牌组列表deckListIn
作为参数,通过pop()
方法从牌组中移除并返回第一张牌,即列表的最后一个元素。
使用嵌套的循环结构生成一副完整的牌组, 放在列表startingDeckList中
代码调用shuffle()
函数将初始牌组startingDeckList
洗牌得到洗牌后的牌组gameDeckList
调用geCard()函数抽取一张牌