扑克牌游戏(黑杰克)牌数不超过21点

阅读: 评论:0

扑克牌游戏(黑杰克)牌数不超过21点

扑克牌游戏(黑杰克)牌数不超过21点

题目:

import randomdef get_shuffled_deck():# ()元祖/定值表# [] 列表:可用于存储其值可变的表# {} 可变集合(set):特点时集合中的元素都不可重复,且无序,其存储依据对象的hash码# 定义的方式:{x[,,x]}# {} 字典:见必须是hash对象# 定义的方式:{键1:值1[,键2:值2,....]}# ###初始化包括52张扑克牌的列表,并混合后返回,表示一副洗好的扑克牌#### 花色suits和序号suits = {'♣', '♥', '♦', '♠'}ranks = {'2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'}deck = []# 创建一副52张的扑克for suit in suits:for rank in ranks:deck.append(rank+''+suit)# random.shuffle(x[,random]):用于将一个列表中的元素打乱random.shuffle(deck)return deckdef deal_card(deck, participant):# ###发一张牌给参与者participant#### deck.pop([i]) 返回并移除下标i位置的对象,当省略i是为最后对象。# pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。card = deck.pop()participant.append(card)return carddef compute_total(hand):# ### 计算并返回一手牌的点数和#####values = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6,'7': 7, '8': 8, '9': 9, '1': 10, 'J': 10,'Q': 10, 'K': 10, 'A': 11}result = 0   # 初始化点数和为0numAccs = 0  # A的个# 计算点数和A的个数for card in hand:result += values[card[0]]if card[0] == 'A':numAccs += 1# 如果点数和 > 21,则尝试把A当作1来计算# (即减去10),多个A循环减去10,直到点数<=21while result > 21 and numAccs > 0:result -= 10numAccs -= 1return resultdef blackjack():# ###21点扑克牌游戏, 计算机人工智能AI为庄家,用户为玩家###### 初始化一副洗好的扑克牌,初始化庄家和玩家手中的牌为空deck = get_shuffled_deck()house = []  # 庄家的牌player = []  # 玩家的牌# 依次给玩家和庄家各发两张牌for i in range(2):   # 开始发两轮牌deal_card(deck, player)  # 给玩家发一张牌deal_card(deck, house)   # 给庄家发一张牌# 打印一手牌print('庄家的牌:', house)print('玩家的牌:', player)# 询问玩家是否继续拿牌, 如果是,继续给玩家发牌answer = input('是否继续拿牌(y/n,(缺省为y)):')while answer in ('', 'y', 'Y'):card = deal_card(deck, player)print('玩家拿到的牌为:{0}, {1}'.format(card, player))# 计算牌点if compute_total(player) > 21:print('爆掉 。。。。。玩家输牌!')return# 询问玩家是否继续拿牌, 如果是,继续给玩家发牌answer = input('是否继续拿牌(y/n,(缺省为y)):')# 庄家(计算机人工智能)按“庄家规则)确定是否拿牌while compute_total(house) < 17:card = deal_card(deck, house)print('庄家拿到的牌:{0}, {1}'.format(card, house))# 计算牌点if compute_total(house) > 21:print('爆掉。。。玩家赢牌')return# 分别计算庄家和玩家的点数,比较点数大小, 输出输赢结果的信息houseTotal, playerTotal = compute_total(house), compute_total(player)if houseTotal > playerTotal:print('庄家赢!')elif houseTotal < playerTotal:print('玩家赢!')elif houseTotal == 21 and 2 == len(house) < len(player):print('You loose')  # 拥有blackjack的庄家赢牌elif  playertotal == 21 and 2 == len(player) < len(house):print('庄家赢牌!')else:print('平局!')if __name__ == '__main__':blackjack()

运行结果:

本文发布于:2024-02-01 09:39:38,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675157635723.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:不超过   扑克牌   黑杰克   游戏
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23