吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2904|回复: 9
收起左侧

[求助] [Python]扑克牌排序

[复制链接]
为了青春 发表于 2020-3-4 23:41
本人喜欢玩拱猪,尝试写了以下代码用于模拟4人随机从52张扑克牌出各抽取13张牌。
想实现将抽到的牌按照从黑桃,红桃、梅花、方片从A到K到10到5到。。。到2的排序。
奈何功力尚欠,希望有大神能指点一二。
感谢感谢!
[Python] 纯文本查看 复制代码
import random
pokers = ['黑A', '黑K', '黑Q', '黑J', '黑0', '黑9', '黑8', '黑7', '黑6', '黑5', '黑4', '黑3', '黑2', '红A', '红K', '红Q', '红J', '红0', '红9', '红8', '红7', '红6', '红5', '红4', '红3', '红2', '梅A', '梅K', '梅Q', '梅J', '梅0', '梅9', '梅8', '梅7', '梅6', '梅5', '梅4', '梅3', '梅2', '方A', '方K', '方Q', '方J', '方0', '方9', '方8', '方7', '方6', '方5', '方4', '方3', '方2']
poker1 = []
poker2 = []
poker3 = []
poker4 = []
n = 0
while n < 13:
	i = random.randint(0,(51-n))
	select = pokers.pop(i)
	poker1.append(select)
	n = n+1

while n < 26:
	i = random.randint(0,(51-n)) #random后需要加randint保证是正整数。
	select = pokers.pop(i)
	poker2.append(select)
	n = n+1

while n < 39:
	i = random.randint(0,(51-n))
	select = pokers.pop(i)
	poker3.append(select)
	n = n+1

while n < 52:
	i = random.randint(0,(51-n))
	select = pokers.pop(i)
	poker4.append(select)
	n = n+1

for poker in poker1:
	print(poker + ' ',end ='') #print()里面加参数end =''即可实现不换行
	
print('\n')

for poker in poker2:
	print(poker + ' ',end ='')
	
print('\n')

for poker in poker3:
	print(poker + ' ',end ='')
	
print('\n')

for poker in poker4:
	print(poker + ' ',end ='')
	
print('\n')

免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
997862597v5 + 1 谢谢@Thanks!
BEASTARS + 1 + 1 用心讨论,共获提升!
takoyi + 1 + 1 学习

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

生如上善若水 发表于 2020-3-5 00:02
正想学习python,谢谢分享
gl809168510 发表于 2020-3-5 01:32
#先自定义每张牌的顺序
pokers = [('黑A', 1), ('红A', 2), ('梅A', 3), ('方A', 4)]
#然后按照顺序排序就好
poker1.sort(key=lambda x:x[1])  # 按照第二个元素大小排序
print(" ".join(poker1))
BEASTARS 发表于 2020-3-5 01:59
可以用random.shuffle()方法直接打乱顺序

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
为了青春 + 1 + 1 谢谢@Thanks!

查看全部评分

PLDancer 发表于 2020-3-5 07:16
先说一下,我没这个能力,因为回忆不全。但我知道哪里有,以前见过的。
书籍《think python》(汉译:《像计算机科学家一样思考Python》)里,关于对象和类那部分我记得见过,作者就实现了排序,好像是做的「扑克类」,花型和牌号分开做的。
找那本书的电子书看一下啦,加油。

这是在52里搜索这书,第一个链接:
https://www.52pojie.cn/thread-1067089-1-1.html
xxscwsrym 发表于 2020-3-5 07:19
本帖最后由 xxscwsrym 于 2020-3-5 07:21 编辑

正想学Python
qq9199 发表于 2020-3-5 08:13
学习一下, 还没入门,,
wxue 发表于 2020-3-5 08:33
学习了 ,个人觉得结合4楼,3楼,方法最佳!
井右寺 发表于 2020-3-5 09:13
建议 把 花色 和 数字分开,做成一个对象或者字典
[Python] 纯文本查看 复制代码
Colors = ['黑', '红', '梅', '方']
Numbers = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']

class Poker():
    def __init__(self, *args, **kwargs):
        if isinstance(args[0], str) and len(args[0]) == 2:
            self.color = args[0][0]
            self.color = args[0][1]
        else:
            self.color = kwargs['color']
            self.number = kwargs['number']

    @property
    def value(self):
        return Colors.index(self.color) * 13 + Numbers.index(self.number)

    def __str__(self):
        return "%s%s" %(self.color, self.number)


直接比较Poker对象的 value大小 进行排序就OK了
 楼主| 为了青春 发表于 2020-3-6 11:31
感谢各位老铁的支持,在结合各位给出的建议的帮助后,已经能实现排序功能了,代码如下。
后续的就是实现图像显示了,这块还真是没接触过。
[Python] 纯文本查看 复制代码
import random
pokers = ['黑A', '黑K', '黑Q', '黑J', '黑0', '黑9', '黑8', '黑7', '黑6', '黑5', '黑4', '黑3', '黑2', '红A', '红K', '红Q', '红J', '红0', '红9', '红8', '红7', '红6', '红5', '红4', '红3', '红2', '梅A', '梅K', '梅Q', '梅J', '梅0', '梅9', '梅8', '梅7', '梅6', '梅5', '梅4', '梅3', '梅2', '方A', '方K', '方Q', '方J', '方0', '方9', '方8', '方7', '方6', '方5', '方4', '方3', '方2']
poker1 = [ ]
poker2 = [ ]
poker3 = [ ]
poker4 = [ ]
n = 0

random.shuffle(pokers)


for poker in pokers:
	print(poker, end = ' ')
	n +=1
	if n in (13, 26, 39, 52):
		print('\n')
print('...................................................'+'\n')

poker1 = pokers[0:13]
poker2 = pokers[13:26]
poker3 = pokers[26:39]
poker4 = pokers[39:52]

Hua={'黑':4,'红':3,'梅':2,'方':1}
shu={'A':14,'K':13,'Q':12,'J':11,'0':10,'9':9,'8':8,'7':7,'6':6,'5':5,'4':4,'3':3,'2':2}

poker1.sort(key=lambda k:(Hua[k[0:1]],shu[k[1:]]),reverse=True) #使用sort给poker1排序
poker2.sort(key=lambda k:(Hua[k[0:1]],shu[k[1:]]),reverse=True)
poker3.sort(key=lambda k:(Hua[k[0:1]],shu[k[1:]]),reverse=True)
poker4.sort(key=lambda k:(Hua[k[0:1]],shu[k[1:]]),reverse=True)

for poker in poker1:
	print(poker + ' ',end ='') #print()里面加参数end =''即可实现不换行
	
print('\n')

for poker in poker2:
	print(poker + ' ',end ='')
	
print('\n')

for poker in poker3:
	print(poker + ' ',end ='')
	
print('\n')

for poker in poker4:
	print(poker + ' ',end ='')
	
print('\n')
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表