总项目目标:用面向过程思想设计一个简单的纸牌游戏程序,称为"Higher or Lower"(高还是低)。游戏中,玩家需要猜测接下来的一张牌是比当前牌高还是低。根据猜测的准确性,玩家可以得到或失去相应的积分。为后续对比面向对象编程思想做准备。
项目1.5 抽两张牌比较大小
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 = []
# 两个嵌套的循环创建一个包含牌的字典cardDict,其中包括点数、花色和用于比较大小的值
# 并将各张牌的字典添加到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
gameDeckList = shuffle(startingDeckList)
# 抽取第一张牌,将该牌的信息以字典形式保存在currentCardDict中
currentCardDict = getCard(gameDeckList)
# 用户通过输入'h'或'l'来猜测下一张牌的大小。
answer = input("猜猜下一张牌是大于还是小于当前的牌: " +
currentCardDict['suit'] + currentCardDict['rank'] +
"(输入 h 或 l)")
# 抽取第二张牌,将该牌的信息以字典形式保存在nextCardDict中
nextCardDict = getCard(gameDeckList)
if answer == 'h':
# 在条件判断语句中,比较下一张牌的值与当前牌的值。
if nextCardDict['value'] > currentCardDict['value']:
print("你猜对了")
else:
print("你猜错了")
elif answer == 'l':
if nextCardDict['value'] < currentCardDict['value']:
print("你猜对了")
else:
print("你猜错了")
print(nextCardDict['suit'] + nextCardDict['rank'])
效果如下:
程序分析:
一个简单的纸牌游戏,主要包括洗牌、抽牌和比较牌的功能。
程序中,比较牌的功能是通过判断用户的猜测和抽取的下一张牌的值来确定是否猜对了。下面是比较牌的具体步骤:
-
用户通过输入'h'或'l'来猜测下一张牌的大小。'h'代表猜测下一张牌的值会比当前牌的值更高(大于),'l'代表猜测下一张牌的值会比当前牌的值更低(小于)。
-
程序使用条件语句对用户的猜测进行判断。如果用户输入为'h',则进入条件判断语句
if answer == 'h':
。 -
在条件判断语句中,比较下一张牌的值
nextCardDict['value']
与当前牌的值currentCardDict['value']
。 -
如果下一张牌的值大于当前牌的值,即
nextCardDict['value'] > currentCardDict['value']
为真,则输出"你猜对了"的提示信息。 -
否则,即下一张牌的值小于或等于当前牌的值,输出"你猜错了"的提示信息。
-
最后,无论猜对与否,都会输出下一张牌的花色和点数,通过
print(nextCardDict['suit'] + nextCardDict['rank'])
实现。