以下代码对于练习python相关的条件循环语句、自定义函数及函数调用、列表、字典、变量运算、基本逻辑等的练习很有帮助,特别是如何使用python语言解决实际问题的思路,且具有一定趣味性,对于Python新手是一个很好的实例。(代码是实现逻辑的重要手段,其中逻辑是根本,代码是手段。逻辑可以在学习代码基础语法过程中慢慢培养,有一定天花板,吃天赋,但通过练习足以应付大多数工作场景逻辑。不管如何,代码基础语法是根基,一定得靠不断的练习,读万卷书才能拨云见雾。加油,少年。。。)炸金花的代码,依照以下逻辑:
1.定义玩家数量
2.生成52张扑克牌
3.每一位玩家随机发三张牌
4.对每位玩家得到的牌进行排序,方便后续对不同类型的牌打分
5.对不同类型的牌进行打分,分以下几种情况:单牌:分配大中小牌得分权重(大牌*100,中牌*10,小牌*1)。对子:这里需要满足一种情况,最小的对子得分一定要大于最大的单牌得分(如最小对子2 2 3得分一定要大于最大的单牌J K A得分,通过单牌规则J K A得分是1541,如果用(2+2)*500+3=2003,此时满足情况),所以计算规则是:对子得分 = (对子数字加和)*500+剩下单牌,用于比较对子大小。顺子:基本规则是最小顺子得分大于最大对子得分(2 3 4得分一定要大于K A A得分,通过对子规则K A A得分是14013,如果用(2+3+4)*2000=18000,此时满足情况),所以计算规则是:顺子得分 = (顺子加和)*2000。同花:基本规则是最小同花得分大于最大顺子得分(同花2 3 5得分一定大于Q K A),计算规则是:同花得分 = (单牌加和)*10000同花顺:同时满足顺子和同花,基于顺子和同花累加出来分数已经达到较高权重,这里无需代码豹子:基本规则是最小豹子得分大于最大同花顺得分(豹子2 2 2得分一定大于同花Q K A),计算规则是:豹子得分 = 单牌之一*3*200000000
6.对以上计算得到的得分进行排序,得出最后排名。
import random
import operator# 1 定义玩家数量
def build_player_list():player_list = []  # 空列表用于装所有的玩家# 通过输入的玩家数量,自动生成对应玩家名字并装入列表for num in range(1, player_nums + 1):player = f"player{num}"player_list.append(player)print(f"玩家有以下{player_nums}位屌丝:", player_list)return player_list# 2 生成52张扑克牌
def build_52_cards():poker_marks = ["♠(Spade)", "♥(Heart)", "♣(Club)", "♦(Diamond)"]  # 四种花色的列表poker_nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A"]  # 对应的13张牌poker_list = []  # 空列表装所有的的52张牌for i in poker_marks:   # 将52张牌装入空列表count = 2for j in poker_nums:card = [f"{i}{j}", count]count += 1poker_list.append(card)# print(poker_list) #用于打印生成的扑克牌,这里隐藏,去掉句首#即可显示return poker_list# 3 发牌
def acquired_cards(player_list, poker_list):    #定义发牌的函数,每人随机获取三张牌player_cards_dic = {}for person in player_list:person_cards = random.sample(poker_list, 3)for card in person_cards:poker_list.remove(card) #通过remove除掉已经发过的牌,避免重复发牌player_cards_dic[person] = person_cardsprint(f"为玩家{person}生成了牌", person_cards)return player_cards_dic# 4 得到的牌从小到大排序
def card_sort(lis):from operator import itemgetter #引入itemgetter函数对列表排序lis.sort(key=itemgetter(1)) #自小到大排序return lis# 5 对可能出现的牌的类型分别进行比较
# # 单牌
def single_type(person_cards, score):weight_val = [1,10,100]score = person_cards[0][1]*weight_val[0]+person_cards[1][1]*weight_val[1]+person_cards[2][1]*weight_val[2]print("计算单牌得分", person_cards, score)return score
# # 对子
def pair_type(person_cards, score):value_set = {i[1] for i in person_cards}if len(value_set) == 2:if person_cards[0][1] == person_cards[1][1]:score = int(person_cards[1][1]) * 2 * 500 + int(person_cards[2][1])else:score = int(person_cards[1][1]) * 2 * 500 + int(person_cards[0][1])print("计算对子得分", person_cards, score)return score
# # 顺子
def straight_type(person_cards, score):if person_cards[1][1]-person_cards[0][1] == 1 and person_cards[2][1] - person_cards[1][1] == 1:score = person_cards[1][1]*3*2000print("计算顺子得分", person_cards, score)return score
# # 同花
def color_type(person_cards, score):type_set = {i[0][0] for i in person_cards}if len(type_set) == 1:score *= 10000print("计算同花得分", person_cards, score)return score
# # 豹子
def leopard_type(person_cards, score):leopard_value = {i[1] for i in person_cards}if len(leopard_value) == 1:score *= 200000000print("计算豹子得分", person_cards, score)return score# 6.调用上面函数以实现赢家排序
player_nums = int(input("请输入玩家数量(大于1个玩家,小于17个玩家):"))  # 输入玩家数量
player_list = build_player_list()   #调用build_player_list函数,生成玩家
poker_list = build_52_cards()   #调用build_52_cards()函数,生成52张扑克牌
player_cards_dic = acquired_cards(player_list, poker_list)  #调用acquired_cards()函数
score_funcbyfunc = [single_type, pair_type, straight_type, color_type, leopard_type]    #按顺序调用不同牌型对应函数并统计得分,放入列表
results = []     #空列表用于装最后结果
for player, person_cards in player_cards_dic.items():person_cards = card_sort(person_cards)  #调用排序函数,将牌从小到大排序print(f"开始计算玩家{player}的得分,最后项为最终得分:")score = 0for i_func in score_funcbyfunc:score = i_func(person_cards, score) # 传入参数results.append([player, score]) #玩家对应得分统计放入列表winner = card_sort(results) #得分排序
print(winner)
print("************************************")
count = 1
for i in winner:print(f"第{count}名是:", winner[-count])count += 1
print("------------------------------------")
print(f"最后的赢家是{winner[-1]}")

用Python写炸金花代码,学习python语言精品案例相关推荐

  1. python写一些小代码_#python#自己写的一段小代码

    代码如下: __author__ = 'Administrator' DEFAULT_TENANT_ID = 1234 DEFAULT_ROLE_ID = 1234 TENANT_ID = int(i ...

  2. Python实现炸金花游戏的示例代码

    本文主要介绍了Python实现炸金花游戏的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下.编程学习资料点击领取. 今天的第二个作品,哈哈哈哈,搞起来感觉还挺 ...

  3. Python解炸金花问题

    Python解炸金花问题 炸金花小游戏 游戏规则: 整体代码 炸金花小游戏 -要求: 编写炸金花游戏程序 自己写一个程序,实现发牌.比大小判断输赢. 游戏规则: 一付扑克牌,去掉大小王,每个玩家发3张 ...

  4. python 实现炸金花小游戏

    python 实现炸金花小游戏 本文章在学习python中进行的练习小游戏,目的是为了让学习者熟悉python中的列表.字典.集合等数据操作. 游戏规则: 一付扑克牌,去掉大小王,每个玩家发3张牌,最 ...

  5. python代码学习——python文件处理及路径处理

    python代码学习--python文件处理 存储相关 路径处理 os.path 目录的新建与删除 路径操作 绝对/相对路径方式获取路径信息 路径拼接和realpath方法 路径拼接 realpath ...

  6. python基础教程怎么样-怎样学习Python?Python入门必看

    Python目前可以用一个字来描述那就是"火",问题来了,这么火的语言零基础小白到底该怎样学习Python? 首先,从基础开始学习,切勿毛躁. 刚开始学习Python的时候,我们可 ...

  7. python入门教材论坛_GitHub - aisuhua/codeparkshare: Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐...

    PythonShare Python初学者(零基础学习Python.Python入门)书籍.视频.资料.社区推荐 本文 主要 针对 零基础 想学习Python者.本文本文由@史江歌(shijiangg ...

  8. python 干什么工作具有明显优势-科多大数据告诉你Python为什么这么牛?学习python有什么优势?...

    原标题:科多大数据告诉你Python为什么这么牛?学习python有什么优势? 选择要学习的技术和选择要上的大学一样重要,如果选错了,你将来不仅得不到自己喜欢的高薪工作,反而会弄得一堆麻烦.如果你打开 ...

  9. 免费python编程自学网站-免费学习Python编程的3个优秀的网站资源

    用Python编写代码一点都不难,事实上它一直被赞誉为最容易学的编程语言.如果你准备学习web开发, Python是一个不错的开始,甚至想做游戏的话,用Python来开发游戏的资源也有很多.这是快速学 ...

最新文章

  1. S/4 BP 的初步研究(一)
  2. 黑马程序员--数组与集合互相转变
  3. 逆向寒假生涯(27/100)
  4. python中的loop_django学习笔记之forloop
  5. 13新功能_新功能简介|MySQL8.0数据查询脱敏
  6. html 图片墙效果,基于html5实现的图片墙效果
  7. mybatis中association和collection的column传入多个参数值
  8. STM32硬件复位时间
  9. mybatis配置指定的数据库连接池、mybatis配置多个数据源
  10. 启用MySQL查询缓存
  11. 技术交底书(一)-----一种移动终端无需充电及移动终端
  12. 【“计算机科学与技术”专业小白成长系列】 计算机操作系统简介
  13. 虹软人脸识别 - 基于QT的桌面客户端与微信小程序及服务器设计
  14. 计算机技术服务的增值税税率,咨询系统集成技术服务税率
  15. el-select如何自定义下拉选项框的宽度
  16. java 调用 delphi_【java】试用JNA调用Delphi的dll方法。
  17. 计算机开不了机反复重启,电脑一直重启就是开不了机怎么样解决
  18. 吴裕雄--天生自然 PYTHON3开发学习:字符串
  19. 怒放7——扬笛水墨写意人物画作品赏析
  20. OJ每日一练——爱跑步的师兄

热门文章

  1. 手把手教你如何快速发表论文(干货)
  2. 【网络技术题库梳理8】网络系统结构与设计的基本原则
  3. win10显卡相关配置
  4. 网络营销理论研究:网络营销信息传递原理及其实践价值
  5. 计算机专业考研院校选择,怎样找到心中的牛校--关于学校的选择问题(计算机专业)...
  6. Java多线程运用——赛马小游戏
  7. 2022年上海市安全员C证考试题库及答案
  8. SAP凭证的类别和记账码
  9. 【meshlab使用指南】06、Select Faces/Vertices inside polyline area功能不能选中点/面
  10. 香港电影中的演员:F字头(持续更新中)