# 游戏规则:
# 一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小,看谁赢。
#
# 有以下几种牌:
# 豹子:三张一样的牌,如3张6.
# 同花顺:即3张同样花色的顺子, 如红桃 5、6、7
# 顺子:又称拖拉机,花色不同,但是顺子,如红桃5、方片6、黑桃7,组成的顺子
# 对子:2张牌一样
# 单张:单张最大的是A
# 这几种牌的大小顺序为, 豹子>同花顺>同花>顺子>对子>单张

# 需程序实现的点:
# 1. 先生成一付完整的扑克牌
# 2. 给5个玩家随机发牌
# 3. 统一开牌,比大小,输出赢家是谁
# 3.1 单牌之间如何比较大小 (权重)
# 3.2 其他牌型如何比较大小
# A:红桃J 红桃K 黑桃A 1.1 13 140 = 154.1
#
# B:方片2 方片2 梅花3 0.2 2 30 = 32.2*5 = 161

# 3.3 判断玩家手里是什么牌(不同的牌型有不同的判断方法)高内聚 低耦合
# val = [2, 2, 3] # SET
# if len(set(val)) == 2: # {2, 3}
# print("对子")
#
# if len(set(val)) == 1:
# print("豹子")

# 代码实现
import random

# 1. 生成牌
def alex():
poke_types = ['', '', '', '']
poke_nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
poke_list = []
for p_type in poke_types:
count = 2
for p_num in poke_nums:
card = [f"{p_type}{p_num}", count]
poke_list.append(card)
count += 1
# print(poke_list)
return poke_list

pokeList = alex()

# 2. 发牌
players = ['木木', '鬼鬼', '神经蛤蟆', 'error', '裕', '感叹号']

def blackGirl(pl, pk, pn):
player_dic = {}
for p_name in pl:
p_cards = random.sample(pk, pn)
for card in p_cards:
pk.remove(card)
player_dic[p_name] = p_cards
print(f"为玩家【{p_name}】生成了牌:{p_cards}")
return player_dic

playerDic = blackGirl(players, pokeList, 3)

# 3. 写好每种牌型的判断函数
# 冒泡排序
def sortList(dataList):
length = len(dataList)
for i in range(length):
for j in range(length - i - 1):
if dataList[j][1] > dataList[j + 1][1]:
dataList[j], dataList[j + 1] = dataList[j + 1], dataList[j]
return dataList

# 单张
def calculate_single(p_cards, score):
# 初始化
# score = 0

# 算分 0.1 1 10
# 先排序
p_cards = sortList(p_cards)
weight_val = [0.1, 1, 10]
count = 0
for card in p_cards:
score += card[1] * weight_val[count]
count += 1

print(f"计算单牌的结果是:{score}")
return score

# 对子
def calculate_pair(p_cards, score):
p_cards = sortList(p_cards)
# 列表推导式
card_val = [i[1] for i in p_cards]

if len(set(card_val)) == 2:
if card_val[0] == card_val[1]: # aab
score = (card_val[0] + card_val[1]) * 50 + card_val[2]
else: # abb
score = (card_val[1] + card_val[2]) * 50 + card_val[0]

print(f"计算对子的结果是:{score}")
return score

# 顺子
def calculate_straight(p_cards, score):
p_cards = sortList(p_cards)

card_val = [i[1] for i in p_cards]
a, b, c = card_val
if b - a == 1 and c - b == 1:
score *= 100
print(f"计算顺子的结果是:{score}")
return score

# 同花
def calculate_same_color(p_cards, score):
color_val = [i[0][0] for i in p_cards]
if len(set(color_val)) == 1:
score *= 1000
print(f"计算同花的结果是:{score}")
return score

# 同花顺
def calculate_same_color_straight(p_cards, score):
# 同花
color_val = [i[0][0] for i in p_cards]
if len(set(color_val)) == 1:
# 顺子
p_cards = sortList(p_cards)

card_val = [i[1] for i in p_cards]
a, b, c = card_val
if b - a == 1 and c - b == 1:
score *= 0.1
print(f"计算同花顺的结果是:{score}")
return score

# 豹子
def calculate_leopard(p_cards, score):
card_val = {i[1] for i in p_cards}

if len(card_val) == 1:
score *= 100000
print(f"计算豹子的结果是:{score}")
return score

# 4. 比对
calc_func_orders = [
calculate_single,
calculate_pair,
calculate_straight,
calculate_same_color,
calculate_same_color_straight,
calculate_leopard
]
player_score = []
for p_name, p_cards in playerDic.items():
print(f"开始计算玩家【{p_name}】的牌:{p_cards}")
score = 0
for calc_func in calc_func_orders:
score = calc_func(p_cards, score)
player_score.append([p_name, score])

winner = sortList(player_score)[-1]

print(f"恭喜最后获胜的玩家是【{winner[0]}】,得分是:{winner[1]}")

python实现打扑克方法的更多相关文章

  1. python 类属性与方法

    Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...

  2. Python执行系统命令的方法 os.system(),os.popen(),commands

    os.popen():用python执行shell的命令,并且返回了结果,括号中是写shell命令 Python执行系统命令的方法: https://my.oschina.net/renwofei42 ...

  3. python 调用 shell 命令方法

    python调用shell命令方法 1.os.system(cmd) 缺点:不能获取返回值 2.os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等   ...

  4. python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异

    1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html   1.__init__() 创建对 ...

  5. python 字典内置方法get应用

    python字典内置方法get应用,如果我们需要获取字典值的话,我们有两种方法,一个是通过dict['key'],另外一个就是dict.get()方法. 今天给大家分享的就是字典的get()方法. 这 ...

  6. [转] python程序的调试方法

    qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python de ...

  7. Python prettytable的使用方法

    Python prettytable的使用方法 prettytable可以整齐地输出一个表格信息: +-----------+------+------------+----------------- ...

  8. Python多线程及其使用方法

    [Python之旅]第六篇(三):Python多线程及其使用方法   python 多线程 多线程使用方法 GIL 摘要: 1.Python中的多线程     执行一个程序,即在操作系统中开启了一个进 ...

  9. Python学习笔记4-如何快速的学会一个Python的模块、方法、关键字

    想要快速的学会一个Python的模块和方法,两个函数必须要知道,那就是dir()和help() dir():能够快速的以集合的型式列出该模块下的所有内容(类.常量.方法)例: #--encoding: ...

  10. Python生成随机数的方法

    这篇文章主要介绍了Python生成随机数的方法,有需要的朋友可以参考一下 如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与 ...

随机推荐

  1. 记录--vue中动态引入图片为什么要是require, 你不知道的那些事

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 相信用过vue的小伙伴,肯定被面试官问过这样一个问题:在vue中动态的引入图片为什么要使用require 有些小伙伴,可能会轻蔑一笑:呵, ...

  2. js中订阅发布模式bus

    export default { list: {}, // 事件中心集中地 /** * 发布订阅 * @param {string} name 事件名 * @param [...args] */ $e ...

  3. KingbaseES集群运维案例之---主备库failover后auto-recovery机制

    KingbaseES集群运维案例之---主备库failover后auto-recovery机制 案例说明: KingbaseES集群,在备库数据库服务down后,可以实现节点数据库服务的自动恢复:在集 ...

  4. 3个.NET开源、免费、强大的商城系统

    前言 今天大姚给大家分享3个.NET开源.免费.强大的商城系统,希望可以帮助到有商城系统开发需求的同学. nopCommerce nopCommerce是一个功能丰富.免费.灵活且可定制的开源电子商务 ...

  5. 在DAYU200上实现OpenHarmony跳转拨号界面

    一.简介 日常生活中,打电话是最常见的交流方式之一,那么如何在OpenAtom OpenHarmony(简称"OpenHarmony")中进行电话服务相关的开发呢?今天我们可以一起 ...

  6. Numpy通用函数及向量化计算

    Python(Cpython)对于较大数组的循环操作会比较慢,因为Python的动态性和解释性,在做每次循环时,必须做数据类型的检查和函数的调度. Numpy为很多类型的操作提供了非常方便的.静态类型 ...

  7. 【FAQ】接入HMS Core广告服务中的常见问题总结和解决方法

    HMS Core广告服务(Ads Kit)为开发者提供流量变现服务和广告标识服务,依托华为终端能力,整合资源,帮助开发者获取高质量的广告内容.同时提供转化跟踪参数服务,支持三方监测平台.广告主进行转化 ...

  8. Linux系统 g++ 链接 libopencv_world.a 静态库编译程序

    编译opencv,我是直接编译成 libopencv_world.a  一个文件 正常链接编译,容易报错:main: hidden symbol `opj_read_header' isn't def ...

  9. java 校验同一张表某个字段值不能重复

    例如 一个实体 user 校验name名字不能重复 思路 1.新增:时比较容易做 直接根据传来的参数 查询实体如果不为空 则查询到了重复值 2.修改:修改需要考虑较多  2.1.既然是不重复 必然是必 ...

  10. PIL.Image, numpy, tensor, cv2 之间的互转,以及在cv2在图片上画各种形状的线

    ''' PIL.Image, numpy, tensor, cv2 之间的互转 ''' import cv2 import torch from PIL import Image import num ...