当前位置: 首页 > news >正文

网站前台空白论坛模板网站建设

网站前台空白,论坛模板网站建设,旅游网站建设费用,手机单页网站教程文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **计算每个玩家的牌型并找出赢家**9. **打印结果** 完整代码 以下游戏规则#xff1a; 那… 文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **计算每个玩家的牌型并找出赢家**9. **打印结果** 完整代码 以下游戏规则 那么我们要实现的功能就是以下几个 生成扑克牌。随机洗牌并分发给五名玩家每人三张牌。判断每位玩家的牌型例如豹子、同花顺等。比较五名玩家的牌型得出赢家。 代码分解与讲解 1. 扑克牌的生成与洗牌 suit_cards [黑桃, 红桃, 方块, 梅花] # 花色 check_number [2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A] # 点数# 嵌套循环生成扑克牌 # poker_list [f{suit}{check} for suit in suit_cards for check in check_number] poker_list [] for suit in suit_cards:for check in check_number:poker_list.append(f{suit}{check})random.shuffle(poker_list) # 洗牌功能 通过嵌套循环生成一副完整的扑克牌共 52 张。 例如“黑桃2”、“红桃A” 等。 使用 random.shuffle() 对扑克牌列表进行随机洗牌确保发牌的随机性。这里面把存储牌的容器设置为列表poker_list其实集合set也可以不过集合有随机性还是喜欢都在掌握中的感觉而且列表方便管理。 2. 给玩家发牌 player [player1, player2, player3, player4, player5] # 玩家列表 # player_poker {p: [] for p in player} # 初始化每个玩家的手牌为空列表字典推导式 player_poker {} # 初始化一个空字典 for p in player: # 遍历每个玩家player_poker[p] [] # 为每个玩家赋值一个空列表表示其手牌player_poker是个字典键是用户列表是值也就是玩家手牌# 确保牌的数量足够分发 if len(poker_list) len(player) * 3:raise ValueError(牌堆中牌的数量不足以分发给所有玩家)# 每人发三张牌 for i in range(3): # 每人发3轮for p in player: # 嵌套循环player中有5个一共循环15次poker poker_list.pop() # 从牌堆顶部发一张牌player_poker[p].append(poker)功能 初始化 5 名玩家每名玩家分配一个空手牌列表。检查如果牌堆中牌的数量不足则抛出错误。每名玩家每轮发一张牌共发 3 轮每人得到 3 张牌。发牌后每名玩家的牌存储在 player_poker 中结构如下{player1: [黑桃K, 方块Q, 红桃A],player2: [梅花7, 黑桃8, 红桃10],... }3. 打印玩家的手牌 for player, pokers in player_poker.items(): # items是字典的方法返回一个可迭代对象每个元素是一个键值对print(f{player}的牌是{, .join(pokers)})功能 将每名玩家的手牌以字符串形式打印出来方便观察。.join() 是一个字符串方法用于将列表中的元素用指定的字符串连接起来。, .join(pokers) 会将列表中的元素用逗号加空格, 连接成一个字符串 , .join([黑桃A, 红桃K, 方块Q]) # 结果: 黑桃A, 红桃K, 方块Q 输出示例 player1的牌是黑桃K, 方块Q, 红桃A player2的牌是梅花7, 黑桃8, 红桃10 ...4. 定义牌的优先级 point_rank {point: i for i, point in enumerate(check_number, start2)} # 字典推导式i,point对这里解释一下point是键i是值 可以去看一下字典推导式的结构组成 功能 point_rank定义点数的大小数值越大点数越高。例如“A” 的优先级最大值为 14。{2: 2, 3: 3, ..., K: 13, A: 14}5. 判断牌型 def poker_type(cards): #这个cards是列表也就是前面键值对中的值points sorted([card[2:] for card in cards], keylambda x: point_rank[x]) # 提取点数并按大小排序suits [card[:2] for card in cards] # 提取花色列表推导式索引前两个字符# 判断是否为豹子if points[0] points[1] points[2]:return 豹子, points# 判断是否为同花顺is_straight (point_rank[points[2]] - point_rank[points[1]] 1 and \point_rank[points[1]] - point_rank[points[0]] 1) or points [2, 3, A]if len(set(suits)) 1 and is_straight: # len(set(suit))1判断一个列表或字符串中的所有元素是否相同return 同花顺, points# 判断是否为顺子if is_straight:return 顺子, points# 判断是否为同花if len(set(suits)) 1:return 同花, points# 判断是否为对子if points[0] points[1] or points[1] points[2] or points[0] points[2]:return 对子, points# 如果都不是返回单张return 单张, points功能 根据玩家的三张牌判断牌型并返回 牌型名称 和 点数列表。 豹子三张点数相同。同花顺花色相同点数连续。顺子点数连续但花色不一定相同。同花花色相同但点数不一定连续。对子两张牌点数相同。单张既不连续也不同花或对子。 6. 确定牌型优先级 hand_rankings [单张, 对子, 顺子, 同花, 同花顺, 豹子]功能 定义牌型的优先级牌型从低到高依次为 单张 对子 顺子 同花 同花顺 豹子。 7. 比较两手牌的大小 def compare_hands(player1, player2):type1, points1 player1type2, points2 player2# 比较牌型优先级if hand_rankings.index(type1) hand_rankings.index(type2):return 1elif hand_rankings.index(type1) hand_rankings.index(type2):return -1# 如果牌型相同逐个比较点数for p1, p2 in zip(reversed(points1), reversed(points2)):if point_rank[p1] point_rank[p2]:return 1elif point_rank[p1] point_rank[p2]:return -1# 如果点数相同return 0功能 先比较两手牌的牌型优先级优先级高者胜。如果牌型相同逐一比较点数由高到低比较。 8. 计算每个玩家的牌型并找出赢家 player_hands {player: poker_type(cards) for player, cards in player_poker.items()}winner max(player_hands.items(), keylambda item: (hand_rankings.index(item[1][0]), item[1][1]))功能 遍历每名玩家的手牌计算牌型。使用 max 函数根据牌型优先级和点数大小找出赢家。 9. 打印结果 print(\n牌局结果:) for player, (hand_type, points) in player_hands.items():print(f{player} 的牌型: {hand_type} ({, .join(points)}))print(f赢家是: {winner[0]}牌型: {winner[1][0]} ({, .join(winner[1][1])}))功能 输出每名玩家的牌型和点数。输出赢家及其牌型。 输出示例 player1 的牌型: 顺子 (10, J, Q) player2 的牌型: 对子 (8, 8, K) player3 的牌型: 单张 (7, 9, A) player4 的牌型: 同花 (4, 6, J) player5 的牌型: 豹子 (K, K, K)赢家是: player5牌型: 豹子 (K, K, K)完整代码 import random# 定义扑克牌花色和点数 suit_cards [黑桃, 红桃, 方块, 梅花] check_number [2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A]# 生成扑克牌 poker_list [f{suit}{check} for suit in suit_cards for check in check_number] random.shuffle(poker_list) # 洗牌# 玩家和玩家手牌 player [player1, player2, player3, player4, player5] player_poker {p: [] for p in player}# 发牌每人发三张 if len(poker_list) len(player) * 3:raise ValueError(牌堆中牌的数量不足以分发给所有玩家)for i in range(3):for p in player:poker poker_list.pop()player_poker[p].append(poker)# 打印每个玩家的牌 for player, pokers in player_poker.items():print(f{player}的牌是{, .join(pokers)})# 定义点数优先级 point_rank {point: i for i, point in enumerate(check_number, start2)}# 判断牌型 def poker_type(cards):points sorted([card[2:] for card in cards], keylambda x: point_rank[x])suits [card[:2] for card in cards]# 判断是否为豹子if points[0] points[1] points[2]:return 豹子, points# 判断是否为同花顺is_straight (point_rank[points[2]] - point_rank[points[1]] 1 and \point_rank[points[1]] - point_rank[points[0]] 1) or points [2, 3, A]if len(set(suits)) 1 and is_straight:return 同花顺, points# 判断是否为顺子if is_straight:return 顺子, points# 判断是否为同花if len(set(suits)) 1:return 同花, points# 判断是否为对子if points[0] points[1] or points[1] points[2] or points[0] points[2]:return 对子, points# 否则为单张return 单张, points# 定义牌型优先级 hand_rankings [单张, 对子, 顺子, 同花, 同花顺, 豹子]# 比较两手牌的大小 def compare_hands(player1, player2):type1, points1 player1type2, points2 player2# 比较牌型优先级if hand_rankings.index(type1) hand_rankings.index(type2):return 1elif hand_rankings.index(type1) hand_rankings.index(type2):return -1# 如果牌型相同逐个比较点数for p1, p2 in zip(reversed(points1), reversed(points2)):if point_rank[p1] point_rank[p2]:return 1elif point_rank[p1] point_rank[p2]:return -1# 如果点数相同结果为平局return 0# 计算每个玩家的牌型 player_hands {player: poker_type(cards) for player, cards in player_poker.items()}# 找出最大牌 winner max(player_hands.items(), keylambda item: (hand_rankings.index(item[1][0]),[point_rank[point] for point in item[1][1]]))# 打印结果 print(\n牌局结果:) for player, (hand_type, points) in player_hands.items():print(f{player} 的牌型: {hand_type} ({, .join(points)}))print(f赢家是: {winner[0]}牌型: {winner[1][0]} ({, .join(winner[1][1])}))
http://www.w-s-a.com/news/463777/

相关文章:

  • 网站建设属于哪种公司电子商务查询网站
  • 工程建设标准强制性条文最新版本网站关键词排名优化应该怎么做
  • 网站网页设计内容品牌高端网站建设公司
  • 网站开发报价 福州中国建筑网官网手机版
  • 网站 图片 自动往右移专门做定制化的网站
  • 最好用的cms手机百度关键词排名 网站优化软件
  • 凉山州城乡规划建设局网站长沙网站建设哪家强
  • 广州网站开发创意设计公司企业自己怎么制作网站首页
  • 曲靖 曲靖网站建设软件(app)开发wordpress 没有远程发布
  • 官方网站开发与定制网站建设技术是干嘛的
  • 昆明网站建设工作室网站菜单导航怎么做的
  • 南京网站做的好的公司猪八戒网站做推广怎么样
  • 建站收费标准福州网站搭建
  • 做防护用品的网站欧美网站建设风格特点
  • 龙华做网站联系电话北京软件开发培训班
  • 做网站运营有前途网站的建设与管理的心得体会
  • 河南网站推广怎么做网页制作免费下载
  • 网站如何屏蔽中国ip商丘网站建设的公司哪家好
  • 东莞广告公司东莞网站建设价格鹤壁哪有做网站的
  • 门户网站界面设计logo设计商标设计
  • 建设银行网站驱动宁波网站建设相信荣胜网络
  • 八里河网站建设项目建设可行性企业品牌推广方式有哪些
  • jsp网站开发之html入门知识广州服装设计公司
  • 做电商看的网站有哪些个人网页制作成品免费
  • 沈阳建站多少钱境外网站 备案
  • 提交网站收录入口斗图在线制作
  • 建设化妆品网站服务医药网站前置审批
  • 购物网站修改注册信息模块的分析怎么注册公司logo
  • 那个网站可以做域名跳转的青岛网站建设定制
  • 网站登记模板互联网技术发展及其影响的调查