扑克牌4四个人玩的扑克牌游戏第一把红桃2还能变

只需一步,快速开始
后使用快捷导航没有帐号?
查看: 1001|回复: 30
小练习:分发扑克牌(补加要求4)
签到天数: 368 天[LV.9]以坛为家II
马上注册加入鱼C,享用更多服务吧^_^
才可以下载或查看,没有帐号?
本帖最后由 冬雪雪冬 于
18:21 编辑
考虑让更多的人参与,适当降低难度。
这次的题目是用python模拟发牌。52张扑克牌发个4个玩家,每人13张,打印出每人手中的牌。
1,列出完整的程序。
2,牌为随机分发。
3,程序以“添加代码文字”方式发布。4. 每个花色从大到小列出,即A,K,Q,J,10...2。
1,前10名回帖奖励。
2,第一个答出符合题意的和最佳回答的给予奖励。最好写出思路和注释。
为让大家独立答题,本帖设为回帖仅作者可见。
&&& ================================ RESTART ================================
&&&
玩家1手中纸牌:
黑桃: Q 9
红心: K 6
方块: A Q J 3
草花: A 10 8 6 4&&
玩家2手中纸牌:
黑桃: A 5 3
红心: 5 4
方块: 9 7 2
草花: K J 7 5 2&&
玩家3手中纸牌:
黑桃: K J 10 8 2
红心: A Q 10 8 7 2
草花: 9&&
玩家4手中纸牌:
黑桃: 7 6 4
红心: J 9 3
方块: K 10 8 5 4
草花: Q 3 复制代码
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 132 天[LV.7]常住居民III
回帖奖励 +3
电脑没带回,
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 38 天[LV.5]常住居民I
回帖奖励 +3
准备做一下
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 271 天[LV.8]以坛为家I
回帖奖励 +3
cardList存52张牌(也可以用循环代替手打。。)
random.sample([cardlist,&&52)产生52个不同的随机数,然后分给4个list
============== RESTART: C:\Users\Administrator\Desktop\test.py ==============
玩家一的牌:
[('方块', '9'), ('梅花', '2'), ('红桃', '8'), ('梅花', '8'), ('红桃', '5'), ('梅花', '9'), ('红桃', '9'), ('梅花', 'K'), ('方块', '6'), ('红桃', '10'), ('红桃', '6'), ('黑桃', '3')]
玩家二的牌:
[('方块', '2'), ('黑桃', 'Q'), ('方块', 'K'), ('方块', '8'), ('梅花', '5'), ('红桃', 'A'), ('梅花', '7'), ('黑桃', '6'), ('红桃', 'K'), ('方块', '3'), ('方块', 'J'), ('黑桃', '4')]
玩家三的牌:
[('黑桃', 'A'), ('黑桃', '5'), ('梅花', '10'), ('梅花', 'J'), ('红桃', 'J'), ('梅花', '3'), ('方块', '5'), ('方块', '10'), ('梅花', '6'), ('红桃', '3'), ('黑桃', '2'), ('黑桃', '8')]
玩家四的牌:
[('方块', '4'), ('方块', '7'), ('黑桃', '10'), ('方块', 'A'), ('红桃', '4'), ('黑桃', 'J'), ('红桃', '7'), ('黑桃', 'K'), ('梅花', 'A'), ('梅花', '4'), ('梅花', 'Q'), ('红桃', '2')]
import random
cardList = [('红桃','A'),('红桃','2'),('红桃','3'),('红桃','4'),('红桃','5'),('红桃','6'),('红桃','7'),
& && && && &('红桃','8'),('红桃','9'),('红桃','10'),('红桃','J'),('红桃','Q'),('红桃','K'),
& && && && &('方块','A'),('方块','2'),('方块','3'),('方块','4'),('方块','5'),('方块','6'),('方块','7'),
& && && && &('方块','8'),('方块','9'),('方块','10'),('方块','J'),('方块','Q'),('方块','K'),
& && && && &('黑桃','A'),('黑桃','2'),('黑桃','3'),('黑桃','4'),('黑桃','5'),('黑桃','6'),('黑桃','7'),
& && && && &('黑桃','8'),('黑桃','9'),('黑桃','10'),('黑桃','J'),('黑桃','Q'),('黑桃','K'),
& && && && &('梅花','A'),('梅花','2'),('梅花','3'),('梅花','4'),('梅花','5'),('梅花','6'),('梅花','7'),
& && && && &('梅花','8'),('梅花','9'),('梅花','10'),('梅花','J'),('梅花','Q'),('梅花','K')]
cardRand = random.sample(cardList,52)
player1 = cardRand[0:12]
player2 = cardRand[13:25]
player3 = cardRand[26:38]
player4 = cardRand[39:51]
print('玩家一的牌:')
print(player1)
print('玩家二的牌:')
print(player2)
print('玩家三的牌:')
print(player3)
print('玩家四的牌:')
print(player4)复制代码
第一个答题
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 121 天[LV.7]常住居民III
回帖奖励 +3
本帖最后由 VVFock3r 于
15:19 编辑
#!/usr/bin/env python
#coding:utf-8
#Python Version: 3.x
import random
import copy
CardType = ['黑桃', '红心', '方块', '草花']
CardNumber = ['2','3','4' ,'5','6','7','8','9','10','J','Q','K','A']
Player = {'玩家1':{}, '玩家2':{}, '玩家3':{}, '玩家4':{}}
#获取所有的纸牌
CARDS = {}
for i in CardType:
& & CARDS[i] = copy.copy(CardNumber)
#给玩家占坑
for i in Player.copy().keys():
& & for j in CardType:
& && &&&Player[i][j] = []
#print('*' * 10,'初始化纸牌','*' * 10)
#print(CARDS,'\n')
#print('*' * 10,'初始化玩家','*' * 10)
#print(Player,'\n')
def GetRandomCard():
& & '''随机获取纸牌'''
& & RandomType = random.choice(list(CARDS.keys()))
& & RandomNumber = random.choice(CARDS[RandomType])
& & return {RandomType:RandomNumber}
def RemoveCard(card):
& & '''删除纸牌'''
& & Key = ''.join(list(card.keys()))
& & Value = card[Key]
& & CARDS[Key].remove(Value)
& & if len(CARDS[Key]) == 0:
& && &&&del CARDS[Key]
Result = []
while True:
& & try:
& && &&&CurrentPlayer = Player.popitem()
& & except KeyError:
& && &&&break
& & for i in range(13):
& && &&&RandomCard = GetRandomCard()
& && &&&Type = ''.join(list(RandomCard.keys()))
& && &&&Number = list(RandomCard.values())[0]
& && &&&CurrentPlayer[1][Type].append(Number)
& && &&&RemoveCard(RandomCard)
& & Result.append(CurrentPlayer)
#重新排序,格式化输出
Result = sorted(Result, key=lambda x: x[0])
for i in Result:
& & print(i[0] + '手中纸牌:')
& & for j in CardType:
& && &&&print(j, end=' ' * 3)
& && &&&hero = i[1][j]
& && &&&#对纸牌进行排序
& && &&&herobuffer = copy.copy(CardNumber)
& && &&&for x in copy.copy(herobuffer):
& && && && &if x not in hero:
& && && && && & herobuffer.remove(x)
& && &&&herobuffer.reverse()
& && &&&hero = herobuffer
& && &&&for z in hero:
& && && && &print('{z:3}'.format(z=z), end='')
& && &&&print()
& & print()复制代码
支持楼主!
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 38 天[LV.5]常住居民I
import random
# 定义扑克牌
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']
heitao = []
hongxin = []
fangkuai = []
caohua = []
for i in range(len(list)):
& & heitao.append('黑桃' + str(list[i]))
for i in range(len(list)):
& & hongxin.append('红心' + str(list[i]))
for i in range(len(list)):
& & fangkuai.append('方块' + str(list[i]))
for i in range(len(list)):
& & caohua.append('草花' + str(list[i]))
puke = heitao + hongxin + fangkuai + caohua
# 打乱牌序
random.shuffle(puke)
# 将扑克牌分发给四位玩家
player1 = puke[:13]
player2 = puke[13:26]
player3 = puke[26:39]
player4 = puke[39:]
player = [player1, player2, player3, player4]
# 将四位玩家的扑克牌按花色分组
puke1 = [[], [], [], []]
puke2 = [[], [], [], []]
puke3 = [[], [], [], []]
puke4 = [[], [], [], []]
puke = [puke1, puke2, puke3, puke4]
for p in range(4):
& & for each in player[p]:
& && &&&if each[:2] == '黑桃':
& && && && &puke[p][0].append(each)
& && &&&elif each[:2] == '红心':
& && && && &puke[p][1].append(each)
& && &&&elif each[:2] == '方块':
& && && && &puke[p][2].append(each)
& && &&&else:
& && && && &puke[p][3].append(each)
# 打印输出
for i in range(4):
& & print('\n玩家%d手中的纸牌:' % (i+1))
& & print('黑桃:', end=' ')
& & for each in puke[i][0]:
& && &&&if each[-1] == '0':
& && && && &print(each[-2:], end=' ')
& && &&&else:
& && && && &print(each[-1], end=' ')
& & print('\n红心:', end=' ')
& & for each in puke[i][1]:
& && &&&if each[-1] == '0':
& && && && &print(each[-2:], end=' ')
& && &&&else:
& && && && &print(each[-1], end=' ')
& & print('\n方块:', end=' ')
& & for each in puke[i][2]:
& && &&&if each[-1] == '0':
& && && && &print(each[-2:], end=' ')
& && &&&else:
& && && && &print(each[-1], end=' ')
& & print('\n草花:', end=' ')
& & for each in puke[i][3]:
& && &&&if each[-1] == '0':
& && && && &print(each[-2:], end=' ')
& && &&&else:
& && && && &print(each[-1], end=' ')
复制代码
献丑了……代码真的太丑……
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 118 天[LV.6]常住居民II
回帖奖励 +3
打发第三方
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 118 天[LV.6]常住居民II
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 271 天[LV.8]以坛为家I
cardList存52张牌
每一张牌有3个属性,exp:('红桃','0','2')-&第1和第3个属性为牌的花色和点数,第2个属性用于排序
random.sample([cardlist,&&52)产生52个不同的随机数,然后分给4个list
player.sort()排序
cardDisp():显示
第一位玩家的牌:
黑桃-2 红桃-A 红桃-8 红桃-2 红桃-10 梅花-8 梅花-7 梅花-10 方块-J 方块-9 方块-6 方块-5
第二位玩家的牌:
黑桃-A 黑桃-9 黑桃-6 黑桃-10 红桃-K 红桃-Q 红桃-5 红桃-4 梅花-K 梅花-2 方块-A 方块-4
第三位玩家的牌:
黑桃-K 黑桃-Q 黑桃-J 黑桃-7 黑桃-3 红桃-J 红桃-6 红桃-3 梅花-Q 梅花-5 方块-2 方块-10
第四位玩家的牌:
黑桃-8 黑桃-5 黑桃-4 红桃-9 梅花-A 梅花-9 梅花-6 梅花-4 梅花-3 方块-K 方块-Q 方块-7
#发牌程序
import random
cardList = [('红桃','4','A'),('红桃','0','2'),('红桃','0','3'),('红桃','0','4'),('红桃','0','5'),('红桃','0','6'),('红桃','0','7'),
& && && && &('红桃','0','8'),('红桃','0','9'),('红桃','0','10'),('红桃','1','J'),('红桃','2','Q'),('红桃','3','K'),
& && && && &('方块','4','A'),('方块','0','2'),('方块','0','3'),('方块','0','4'),('方块','0','5'),('方块','0','6'),('方块','0','7'),
& && && && &('方块','0','8'),('方块','0','9'),('方块','0','10'),('方块','1','J'),('方块','2','Q'),('方块','3','K'),
& && && && &('黑桃','4','A'),('黑桃','0','2'),('黑桃','0','3'),('黑桃','0','4'),('黑桃','0','5'),('黑桃','0','6'),('黑桃','0','7'),
& && && && &('黑桃','0','8'),('黑桃','0','9'),('黑桃','0','10'),('黑桃','1','J'),('黑桃','2','Q'),('黑桃','3','K'),
& && && && &('梅花','4','A'),('梅花','0','2'),('梅花','0','3'),('梅花','0','4'),('梅花','0','5'),('梅花','0','6'),('梅花','0','7'),
& && && && &('梅花','0','8'),('梅花','0','9'),('梅花','0','10'),('梅花','1','J'),('梅花','2','Q'),('梅花','3','K')]
cardRand = random.sample(cardList,52)#打乱顺序
#分割
player1 = cardRand[0:12]
player2 = cardRand[13:25]
player3 = cardRand[26:38]
player4 = cardRand[39:51]
#排序
player1.sort(reverse = 1)
player2.sort(reverse = 1)
player3.sort(reverse = 1)
player4.sort(reverse = 1)
#显示
def cardDisp(player):
& & for j in range(12):
& && &&&print(player[j][0],player[j][2],sep='-',end=' ')
& & print()
print('第一位玩家的牌:')
cardDisp(player1)
print('第二位玩家的牌:')
cardDisp(player2)
print('第三位玩家的牌:')
cardDisp(player3)
print('第四位玩家的牌:')
cardDisp(player4)复制代码
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 66 天[LV.6]常住居民II
回帖奖励 +3
#本程序的技术总结:
# (1)如何设计整个算法:& & 1.写出52张牌的列表& &2.对列表进行随机排序& &3.对排序后的内容每四张牌抽取一张组成每个人的牌组
#& && && && && && && && && & 4.具体显示牌组的信息
# (2)对列表进行随机排序& &*&&可用random.shuffle来解决
# (3)如何显示JQK.&&if语句, 注意列表的起始位置是0
# (4)***遇到的最大的问题:如何将玩家的牌组按花色输出,并各花色之间换行。 if if 嵌套, 然后在第一层if语句的最后print()实现换行
# 仍需要改进的地方: 能否将每个人的牌组显示过程进行函数封装!
import random
count=1& & #为打印计数
colour=['方片','梅花','红心','黑桃']
royal=['J','Q','K','A']
for j in colour:
& & for i in range(1,14):
& && &&&if i&10:
& && && && &list.append([j+str(i+1),i])
& && &&&elif 13&i&9:
& && && && &list.append([j+''.join(royal[i-10:i-9]),i])& && && &# i&10 时,要发 J Q K
& && &&&elif i==13:
& && && && &list.append([j+''.join(royal[3:4]),i])
#print(list)& && && &可测试是否打印了完整了52张扑克。
#print(list)
random.shuffle(list)
print('list',list)
& && &#打乱牌的顺序
print(len(list))& && && & #打乱后测试下是否还是52张
A=(list[::4])
print('chushiA',A)
A.sort(key=lambda y:y[1])
A.reverse()
#print('A[0]为',A[0])
print('正在发牌,请各位玩家稍安勿躁:')
print('玩家袁力手中的牌组为:')
#B=''.join(A[0])
for j in colour:
& & print('%s:'%j,end=' ')
& & #number=B.count(j)
& & #print('%s张,'%number,end='')
& & for i in A:
& && &&&if i[0][:2]==j:
& && && && &print('%s '%i[0][2:],end=' ')& && &#如果这样打印,显示的结果是选手各类牌的分布,但却没有。无法实现不同花色牌的换行
& & print('')& && && && && && & #& &各个花色之间进行换行
print('系统科学计算,预估该玩家的胜率为0%')
C=(list[1::4])
C.sort(key=lambda y:y[1])
C.reverse()
print('玩家刁文天手中的牌组为:')
#D=''.join(C[0])
for j in colour:
& & print('%s:'%j,end=' ')
& & #number=D.count(j)
& & #print('%s张,'%number,end='')
& & for i in C:
& && &&&if i[0][:2]==j:
& && && && &print('%s '%i[0][2:],end=' ')& && &#如果这样打印,显示的结果是选手各类牌的分布,但却没有。无法实现不同花色牌的换行
& & print('')& && && && && && & #& &各个花色之间进行换行
E=(list[2::4])
E.sort(key=lambda y:y[1])
E.reverse()
print('系统科学计算,该玩家的期望胜率为0%')
print('玩家习近平手中的牌组为:')
#F=''.join(E[0])
for j in colour:
& & print('%s:'%j,end=' ')
& &# number=F.count(j)
& &# print('%s张,'%number,end='')
& & for i in E:
& && &&&if i[0][:2]==j:
& && && && &print('%s '%i[0][2:],end=' ')& && &#如果这样打印,显示的结果是选手各类牌的分布,但却没有。无法实现不同花色牌的换行
& & print('')& && && && && && & #& &各个花色之间进行换行
print('系统科学计算,预估该玩家的胜率为99.99%')
G=(list[3::4])
G.sort(key=lambda x:x[1])
G.reverse()
print('玩家胡金焱手中的牌组为:')
#H=''.join(G[0])
for j in colour:
& & print('%s:'%j,end=' ')
& &# number=H.count(j)
& &# print('%s张,'%number,end='')
& & for i in G:
& && &&&if i[0][:2]==j:
& && && && &print('%s '%i[0][2:],end=' ')& && &#如果这样打印,显示的结果是选手各类牌的分布,但却没有。无法实现不同花色牌的换行
& & print('')& && && && && && & #& &各个花色之间进行换行
print('系统科学计算,预估该玩家的胜率为0.01%')
热爱鱼C^_^
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 228 天[LV.7]常住居民III
回帖奖励 +3
第一次答题,有点小激动。感觉自己做的不好,走向了弯路....程序有bug。我先提交待我想出改进再提交,期待看到其他大牛的答案让我这个小菜鸟提高一下
import random
dict_init = {
& && && && &'黑桃':['A','K','Q','J','10','9','8','7','6','5','4','3','2'],
& && && && &'红心':['A','K','Q','J','10','9','8','7','6','5','4','3','2'],
& && && && &'方块':['A','K','Q','J','10','9','8','7','6','5','4','3','2'],
& && && && &'草花':['A','K','Q','J','10','9','8','7','6','5','4','3','2']
& && && && &}
#random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱
def shuffle(dict_init,num_card,num):
& & #四个玩家依次产生牌
& & #发三次牌最后一个人用dict_init 这个字典
& &
& & while(num_card):
& && &&&'''
& && &&&random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。
& && &&&其中参数a是下限,参数b是上限,生成的随机数n: a &= n &= b
& && &&&'''
& && &&&a = random.randint(0,3)
& && &&&if a ==0:
& && && && &color = '黑桃'
& && &&&elif a==1:
& && && && &color = '红心'
& && &&&elif a==2:
& && && && &color = '方块'
& && &&&else:
& && && && &color = '草花'
& && &&&#洗牌
& && &&&random.shuffle(dict_init[color])
& && &&&#弹出牌存入
& && &&&num.setdefault(color,[])
& && &&&num[color].append(dict_init[color].pop())
& && &&&num_card -= 1
& && &&&
def print_card(num,number):
& & print('玩家%d手中的牌' %number)
& & for key,value in num.items():
& && &&&print(key,value)
num1 = {}
num2 = {}
num3 = {}
num_card = 13
shuffle(dict_init,num_card,num1)
shuffle(dict_init,num_card,num2)
shuffle(dict_init,num_card,num3)
print_card(num1,1)
print_card(num2,2)
print_card(num3,3)
print_card(dict_init,4)
复制代码
有小错误,建议修改&
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 20 天[LV.4]偶尔看看III
回帖奖励 +3
本帖最后由 bvac 于
17:56 编辑
import random
huase = ['黑桃','红心','方块','草花']
num = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
# r = random.choice(huase)
# total2 = list(map(lambda x: r + x, num))
total = []
for i in huase:
& & & & total3 = list(map(lambda x: i + x, num))
& & & & total.extend(total3)
# 玩家 = [[],[],[],[]]
random.shuffle(total)
玩家1 = total[:13]
玩家2 = total[13:26]
玩家3 = total[26:39]
玩家4 = total[39:]
# print(玩家1,len(玩家1))
# print(玩家2,len(玩家2))
# print(玩家3,len(玩家3))
# print(玩家4,len(玩家4))
def printinfo(listinfo,count):
& & 方块 = []
& & 黑桃 = []
& & 红心 = []
& & 草花 = []
& & for i in listinfo:
& && &&&if '方块' in i:
& && && && &方块.append(i[2:])
& && &&&elif '黑桃' in i:
& && && && &黑桃.append(i[2:])
& && &&&elif '草花' in i:
& && && && &草花.append(i[2:])
& && &&&else:
& && && && &红心.append(i[2:])
& & 黑桃 = sorted(黑桃, key=lambda x:num.index(x), reverse=True)
& & 草花 = sorted(草花, key=lambda x:num.index(x), reverse=True)
& & 方块 = sorted(方块, key=lambda x:num.index(x), reverse=True)
& & 红心 = sorted(红心, key=lambda x:num.index(x), reverse=True)
& & msg = '''
& && &&&玩家%s的牌
& && &&&黑桃:%s
& && &&&红心:%s
& && &&&方块:%s
& && &&&草花:%s
& & ''' %(count,黑桃,红心,方块,草花)
& & print(msg,end='------------')
for i in [玩家1,玩家2,玩家3,玩家4]:
& & printinfo(i, count)
& & count += 1
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 23 天[LV.4]偶尔看看III
回帖奖励 +3
本帖最后由 黎明晨曦 于
11:08 编辑
我用的linux,在里面写中文要报错,所以没有中文,写了2小时,终于能发牌了,但是还不能对牌排序,
实在是写不动了,注释是在回复里加的,请大神指点后面的思路,在此先谢谢了
#!/usr/bin/python
paidui=['A','K','Q','J']
num=[10,9,8,7,6,5,4,3,2]
for i in num:
& & & & paidui.append(str(i))
#生成1-13的牌
huase=[&heitao&,&hongtao&,&meihua&,&fangkuai&]
xinpaidui=[]
for i in huase:
& & & & for j in paidui:
& & & & & & & & xinpaidui.append([i,j])
#生成四种花色的牌堆
import random
for i in range(0,13):
& & & & length=len(xinpaidui)
& & & & getnum=random.randint(0,length-1)
& & & & puke=xinpaidui[getnum]
& & & & A.append(puke)
& & & & del xinpaidui[getnum]
print('A de pai\n')
#给A发牌,以下是给BCD发牌
for i in range(0,13):
& & & & length=len(xinpaidui)
& & & & getnum=random.randint(0,length-1)
& & & & puke=xinpaidui[getnum]
& & & & B.append(puke)
& & & & del xinpaidui[getnum]
print('B de pai\n')
for i in range(0,13):
& & & & length=len(xinpaidui)
& & & & getnum=random.randint(0,length-1)
& & & & puke=xinpaidui[getnum]
& & & & C.append(puke)
& & & & del xinpaidui[getnum]
print('C de pai\n')
for i in range(0,13):
& & & & length=len(xinpaidui)
& & & & getnum=random.randint(0,length-1)
& & & & puke=xinpaidui[getnum]
& & & & D.append(puke)
& & & & del xinpaidui[getnum]
print('D de pai\n')
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 141 天[LV.7]常住居民III
回帖奖励 +3
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 9 天[LV.3]偶尔看看II
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 65 天[LV.6]常住居民II
本帖最后由 kunaiai 于
15:52 编辑
好吧 我又更新了&&有强迫症的孩子表示伤不起啊
把一副牌PlayCards(52或54个不同的牌PlayCard对象) 通过OperateCard的发牌方法发给玩家Players(n个Player对象)
class PlayCard:
& & '牌类'
& & def __init__(self,card_type,num,big_2 = False,card_type_order = False):
& && &&&self._card_type = card_type
& && &&&if num == 11:
& && && && &self._card_num = &J&
& && &&&elif&&num == 12:
& && && && &self._card_num = &Q&
& && &&&elif&&num == 13:
& && && && &self._card_num = &K&
& && &&&elif&&num == 14:
& && && && &self._card_num = &A&
& && &&&elif&&num == 200:
& && && && &self._card_num = &小&
& && &&&elif&&num == 210:
& && && && &self._card_num = &大&
& && &&&else:
& && && && &self._card_num = str(num)
& && && && && && &&&
& && &&&self._num = str(num).zfill(2) #接拼比大小(排序)字符串
& && &&&
& && &&&if big_2 and num == 2: #2是大牌
& && && && &self._num = &15&
& && && && &
& && &&&if card_type_order:&&#同点不同花色大小问题& && && &
& && && && &if card_type == '黑桃':
& && && && && & self._num += '4'
& && && && &elif card_type == '红心':
& && && && && & self._num += '3'
& && && && &elif card_type == '方块':
& && && && && & self._num += '2'
& && && && &elif card_type == '草花':
& && && && && & self._num += '1'
& && &&&else:
& && && && &self._num += '0'
& && && && &
& && &&&self._card_name = card_type + self._card_num
class PlayCards:
& & '一副牌&&用组合'
& & def __init__(self, king = False, big_2 = False):
& && &&&self._list_card = []#一副牌 52或54张牌对象
& && &&&self._list_card_last = []#发牌后剩余的牌 比如斗地主会剩3张牌
& && &&&self._list_type_card = ['黑桃','红心','方块','草花']
& && &&&for type_card in self._list_type_card:
& && && && &for i in range(2,15):
& && && && && & self._list_card.append(PlayCard(type_card, i, big_2))
& && &&&if king: #2张王牌
& && && && &self._list_card.append(PlayCard('王', 200)) #小王
& && && && &self._list_card.append(PlayCard('王', 210)) #大王
& && && && &self._list_type_card.append('王')
& && && && && &
& & def resetCardLast(self):
& && &&&'重置_list_card_last 多次发牌就不用在实例化PlayCards'
& && &&&#self._list_card_last.clear()
& && &&&self._list_card_last = self._list_card.copy() #需用浅拷贝 要不然也会把_list_card的记录删除掉
& && &&&
class Player:
& & '玩家类'
& & def __init__(self,name):
& && &&&self._play_name = name
& && &&&self._play_card = []
& & def sort(self):
& && &&&'排序 大的在前'
& && &&&lenght = len(self._play_card)-2 #最后一个数不用循环 所以-2
& && &&&for i in range(0,lenght):
& && && && &for j in range(0,lenght-i+1):
& && && && && & if self._play_card[j]._num & self._play_card[j+1]._num:
& && && && && && &&&tem = self._play_card[j+1]
& && && && && && &&&self._play_card[j+1] = self._play_card[j]
& && && && && && &&&self._play_card[j] = tem
& & def clearPlayCard(self):
& && &&&'重置玩家手上的牌'
& && &&&self._play_card.clear()
& && &&&
class Players:
& & '玩家类组合 3人 4人'
& & def __init__(self,num):
& && &&&self._plays = [Player('玩家'+str(i+1)) for i in range(num)]
& & def clearPlayCardAll(self):
& && &&&'每轮发牌前都要重置所有玩家手上的牌'
& && &&&for play in self._plays:
& && && && &play.clearPlayCard()
& && && && &
import random as r
class OperateCard:
& & '牌的一些动作&&比如发牌'
& & @staticmethod
& & def sendPlayCard(play,card_last):
& && &&&'给玩家发牌从card_last里随机取并把取到的牌在card_last里删除'
& && &&&this_card = r.choice(card_last)
& && &&&play._play_card.append(this_card)
& && &&&card_last.remove(this_card)
& & @staticmethod
& & def sendPlayCardPop(play,card_last):
& && &&&'''给玩家发牌取card_last的最后一张牌并在card_last里删除(pop方法)
& && && &&&但是发牌前需把card_last的内容乱序下
& && && &&&这种发牌方法更符合实际'''
& && &&&play._play_card.append(card_last.pop())
& && &
& & @staticmethod
& & def shuffleCard(card_last):
& && &&&'把card_last的顺序打乱,类似于洗牌'
& && &&&r.shuffle(card_last)
& &&&
& & @staticmethod& &
& & def printPlayCard(play,card_type):
& && &&&print('%s手中纸牌:' % play._play_name)
& && &&&play.sort()
& && &&&for card_type in card_type:
& && && && &print(card_type,': ',end='')
& && && && &for card in play._play_card:& && && && &
& && && && && & if card_type == card._card_type:
& && && && && && &&&print(card._card_num,' ',end='')
& && && && &print()
& && &&&print()
& & @staticmethod& &
& & def printCardLast(card_last,has_king):
& && &&&'显示发剩的牌'
& && &&&if has_king:
& && && && &print('发剩的纸牌:')
& && && && &for last in card_last:
& && && && && & print(last._card_name,' ',end='')
& && && && &print()
& && &&&print()
& && &&&
& && &&&
def play(num):
& & 'num=3是斗地主 4是一般不带王的'
& & has_king = False
& & big_2 = False
& & if num == 3:
& && &&&has_king = True
& && &&&big_2 = True
& & #初始化N个玩家和一副牌
& & plays = Players(num)
& & card = PlayCards(has_king,big_2)
& & count = 3
& & while count:
& && &&&print('第 %d 次发牌!!!' % (4 - count))
& && &&&#开始发牌
& && &&&card.resetCardLast() #重置_list_card_last变量 里面有一副牌& && &&&
& && &&&OperateCard.shuffleCard(card._list_card_last) #先打乱牌的顺序 类似于洗牌
& && &&&plays.clearPlayCardAll() #清空所有玩家手上的牌
& && &&&
& && &&&len_card = len(card._list_card)//num
& && &&&if num == 3:
& && && && &len_card -= 1 #斗地主要少发一张
& && &&&
& && &&&for i in range(len_card):
& && && && &for play in plays._plays:
& && && && && & OperateCard.sendPlayCardPop(play,card._list_card_last)#因为temp是可变变量 只要是通过方法修改 就不需要返回
& && &&&
& && &&&for play in plays._plays:& && &&&
& && && && &OperateCard.printPlayCard(play,card._list_type_card)
& && &&&OperateCard.printCardLast(card._list_card_last,has_king)
& && &&&
& && &&&count -= 1
& && &&&
play(3)
print()
print()
play(4)
复制代码
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 100 天[LV.6]常住居民II
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 40 天[LV.5]常住居民I
一定要把这个写出来,虽然现在觉得很难!!!
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 271 天[LV.8]以坛为家I
求公布最佳答案,看下别人的思路
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 46 天[LV.5]常住居民I
序列分取元素,通过打乱列表每人一轮提取列表中的一个元素。我写了一半感觉还得改进
#-*-conding:utf-8 -*-
import random
a=['a1','a2','a3','a4','a5','a6','a7','a8','a9','a10','aJ','aQ','aK'] #黑桃
b=['b1','b2','b3','b4','b5','b6','b7','b8','b9','b10','bJ','bQ','bK'] #红桃
c=['c1','c2','c3','c4','c5','c6','c7','c8','c9','c10','cJ','cQ','cK'] #梅花
d=['d1','d2','d3','d4','d5','d6','d7','d8','d9','d10','dJ','dQ','dK'] #方块
k=[] #玩家1
f=[] #玩家2
e=[] #玩家3
q=[] #玩家4
v=a+b+c+d
random.shuffle(v) #洗牌
while len(v)&0:
& & k.append(v[0])
& & f.append(v[1])
& & e.append(v[2])
& & q.append(v[3])
& & del v[:4]
print('玩家1手中纸牌:')
print('黑桃:')
for k in k:
& & if k[0]=='a':
& && &&&print(k[1])
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
•••(
Powered by

我要回帖

更多关于 扑克牌有几张红桃 的文章

 

随机推荐