Python 洗牌一副牌,并将其分发给四名玩家。当有人有4颗红心时,你需要停止比赛,说出谁是赢家

Python 洗牌一副牌,并将其分发给四名玩家。当有人有4颗红心时,你需要停止比赛,说出谁是赢家,python,probability,Python,Probability,我需要编写一个python代码来洗牌,并将其分发给四名玩家。当有人有4颗红心时,你需要停止比赛,说出谁是赢家。因为我是python的初学者,直接完成了它。谁能给我一个优化的方法来编码这个??。这是我的尝试 import random colour=["Heart","Spade","Club","Diamond"] a=[2,3,4,5,6,7,8,9,10,"J","Q","K","A"] player1,player2,player3,player4=[],[],[],[] shuffl

我需要编写一个python代码来洗牌,并将其分发给四名玩家。当有人有4颗红心时,你需要停止比赛,说出谁是赢家。因为我是python的初学者,直接完成了它。谁能给我一个优化的方法来编码这个??。这是我的尝试

import random
colour=["Heart","Spade","Club","Diamond"] 
a=[2,3,4,5,6,7,8,9,10,"J","Q","K","A"] 
player1,player2,player3,player4=[],[],[],[]
shuffle=[{x:y} for x in colour for y in a ]
cnt=0
while len(shuffle)!=0:
    p1,p2,p3,p4=random.sample(population=shuffle,k=4) 

    i1=shuffle.index(p1)
    del shuffle[i1]
    i2=shuffle.index(p2)
    del shuffle[i2]
    i3=shuffle.index(p3)
    del shuffle[i3]
    i4=shuffle.index(p4)
    del shuffle[i4]

    if "Heart" in p1:
        player1.append(p1)
        if len(player1)>=4:
            print("player 1 is win ,heart cards are:",player1)
            break
    if "Heart" in p2:
        player2.append(p2)
        if len(player2)>=4:
            print("player 2 is win,heart cards are:",player2)
            break
    if "Heart" in p3:
        player3.append(p3)
        if len(player3)>=4:
            print("player 3 is win,heart cards are:",player3)
            break
    if "Heart" in p4:
        player4.append(p4)
        if len(player4)>=4:
            print("player 4 is win,heart cards are:",player4)
            break

这副牌有52张牌。洗牌一次。给每位玩家发一张牌,直到牌组为空或其中一名玩家有4颗红心。一颗心是一张数字为0的卡片。其他套件有1个4型、2个4型和3个4型

from random import shuffle

deck = range(52)
shuffle(deck)

from itertools import cycle

players = [[] for _ in range(4)]

for i, p in cycle(enumerate(players)):
    if not deck: break
    p.append(deck.pop())
    if sum(1 for c in p if c % 4 == 0) == 4:
        print i
        break

print players

假设卡1-12是红心。我使用洗牌功能分发卡片,然后将它们分成4个阵列。我只是计算每个数组中少于13张牌的最小索引,然后返回palyer索引

from random import shuffle
import numpy as np
x = range(52)
shuffle(x)
x = [(i<13)*1 for i in x]
y = [np.cumsum([x[i*4+n] for i in range(13)]) for n in range(4)]
def findmin(x, v):
    try:
        return x.index(v)
    except:
        return 9999

y = [findmin(list(y[i]), 4)for i in range(4)]
y.index(min(y))
来自随机导入洗牌
将numpy作为np导入
x=范围(52)
洗牌(x)

x=[(我想问题是要求审查工作代码,因为这样做会比这样做更好。如果这是为了分配任务,代码本身似乎很好,唯一的挑剔是它应该说“玩家1赢了”,而不是“是赢了”。如果这是一个你想改进的个人项目,那么代码审查网站就是你要去的地方。