édité:
pour faire plus simple imaginons que j'ai un jeu de cartes qui a 60 cartes Je veux ti = o distribuer cette carte pour 6 joueurs.
Je veux que la carte soit distribuée 1 par 1 ou 2 par 2 ou 3 par 3 ou 10 par 10
Uploading the file tolist total 60 PlayerHods 10.0 Sarting Buulid the combo lists The max rounds is 2.0 ['1', '2', '3', '4', '5', '30', '31', '32', '33', '34', '35', '60'] ['6', '7', '8', '9', '10', '36', '37', '38', '39', '40'] ['11', '12', '13', '14', '15', '41', '42', '43', '44', '45'] ['16', '17', '18', '19', '20', '46', '47', '48', '49', '50'] ['21', '22', '23', '24', '25', '51', '52', '53', '54', '55'] ['26', '27', '28', '29', '30', '56', '57', '58', '59', '60'] 12 10 10 10 10 10
Comme vous pouvez le voir, j'ai le 'Comb1' avec 12 et I peut voir le 30 faisant partie du comb6 et aussi dans le Comb1 ir devrait être seulement dans Comb1 même avec 60
Voici le résultat de mon code:
import random
Indtester =0
Testword = []
while Indtester < 60:
item = random.randint(0,100)
Testword.append(str(item))
Indtester=Indtester+1
words=Testword
#---------------Ini variable befeore the build
limt =5
ind = 1
Comb1=[]
Comb2=[]
Comb3=[]
Comb4=[]
Comb5=[]
Comb6=[]
total =len(words)
PlayerHods = total/6
print("total ",total,"PlayerHods ",PlayerHods)
MaxRound =PlayerHods/limt
Round =1
#---------------Ini variable befeore the build
print("Sarting Buulid the combo lists")
print("The max rounds is ",MaxRound)
for line in words:
if ind <= limt :
word = line
word = word.replace("\n","")
lastwordcomb1 =word
lastindc1=ind
Comb1.append(word)
if ind > limt and ind <= limt*2:
word = line
word = word.replace("\n","")
lastwordcomb2 =word
lastindc2=ind
Comb2.append(word)
if ind > limt*2 and ind <= limt*3:
word = line
word = word.replace("\n","")
lastwordcomb3 =word
lastindc3=ind
Comb3.append(word)
if ind > limt*3 and ind <= limt*4:
word = line
word = word.replace("\n","")
lastwordcomb4 =word
lastindc4=ind
Comb4.append(word)
if ind > limt*4 and ind <= limt*5:
word = line
lastwordcomb5 =word
lastindc5=ind
word = word.replace("\n","")
Comb5.append(word)
if ind > limt*5 and ind <= limt*6 :
word = line
word = word.replace("\n","")
lastwordcomb6 =word
lastindc6=ind
Comb6.append(word)
ind =ind+1
if ind > limt*6:
word = line
word = word.replace("\n","")
lastwordcomb1 =word
lastindc1=ind
Comb1.append(word)
ind =1
Round=Round+1
print(Comb1)
print(Comb2)
print(Comb3)
print(Comb4)
print(Comb5)
print(Comb6)
print(len(Comb1),len(Comb2),len(Comb3),len(Comb4),len(Comb5),len(Comb6))
3 Réponses :
Quelque chose comme ceci
['0', '1', '2', '3', '4', '30', '31', '32', '33', '34'] ['5', '6', '7', '8', '9', '35', '36', '37', '38', '39'] ['10', '11', '12', '13', '14', '40', '41', '42', '43', '44'] ['15', '16', '17', '18', '19', '45', '46', '47', '48', '49'] ['20', '21', '22', '23', '24', '50', '51', '52', '53', '54'] ['25', '26', '27', '28', '29', '55', '56', '57', '58', '59']
Résultat:
cards = [str(num) for num in range(60)]
num_players = 6
player_hands = []
for player in range(num_players):
player_hands.append([])
# 1 by 1 or 2 by 2, etc
amount_at_a_time = 5
for card_idx, card in enumerate(cards):
# Use % to cycle through players 0-5
current_player = int(card_idx//amount_at_a_time) % num_players
player_hands[current_player].append(card)
[print(hand) for hand in player_hands]
bonjour, pas exactement ce que je veux, parce que le 1er joueur devrait 5 cartes successives 0,1,2,3,4,5 puis les 5 suivantes pour le joueur 2 jusqu'à ce qu'il arrive au joueur 6 et ensuite, le joueur1 aura 5 cartes successives
C'est 2 par 2 parce que vous avez dit "Je veux que la carte soit distribuée 1 par 1 ou 2 par 2 ou 3 par 3 ou 10 par 10". Pour qu'il soit 5 à la fois, remplacez amount_at_a_time par 5.
Au cas où cela aiderait quelqu'un à trouver la solution dont j'avais juste besoin pour mettre le suivant dans le dernier bloc if sans rien changer:
pour la ligne en mots:
if ind <= limt :
word = line
word = word.replace("\n","")
lastwordcomb1 =word
lastindc1=ind
Comb1.append(word)
if ind > limt and ind <= limt*2:
word = line
word = word.replace("\n","")
lastwordcomb2 =word
lastindc2=ind
Comb2.append(word)
if ind > limt*2 and ind <= limt*3:
word = line
word = word.replace("\n","")
lastwordcomb3 =word
lastindc3=ind
Comb3.append(word)
if ind > limt*3 and ind <= limt*4:
word = line
word = word.replace("\n","")
lastwordcomb4 =word
lastindc4=ind
Comb4.append(word)
if ind > limt*4 and ind <= limt*5:
word = line
lastwordcomb5 =word
lastindc5=ind
word = word.replace("\n","")
Comb5.append(word)
if ind > limt*5 and ind <= limt*6 :
word = line
word = word.replace("\n","")
lastwordcomb6 =word
lastindc6=ind
Comb6.append(word)
ind =ind+1
if ind > limt*6:
next
ind =1
Round=Round+1
Enfin, je pense que je pourrais comprendre ce que vous voulez. Voici ma solution:
[[0, 1, 2, 9, 10, 11], [3, 4, 5, 12, 13, 14], [6, 7, 8, 15, 16, 17]]
il est extrêmement court et fait un usage exhaustif des compréhensions .
En supposant que TOTAL = 18 , N = 3 , K = 3 et words = list (range ( TOTAL)) (c'est-à-dire [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] ), voici le résultat:
import random TOTAL = 18 N = 3 K = 3 ROUNDS_SIZE = N * K words = [random.randint(0, 100) for _ in range(TOTAL)] partition = [[words[i] for i in (j + n * K + k for j in range(0, TOTAL, ROUNDS_SIZE) for k in range(K))] for n in range(N)] print(partition)
Faites-moi savoir si cela a fonctionné pour vous.
@DjalilIounis ma réponse a-t-elle fonctionné pour vous? Si tel est le cas, veuillez le marquer comme accepté (coche verte), sinon, faites-moi savoir ce qui ne va pas. Thnx à l'avance!
Je ne sais pas ce que fait tout ce code, mais votre question est-elle essentiellement de savoir comment regrouper les éléments d'une liste en sous-groupes d'une taille donnée?
Comme ceci: stackoverflow.com/questions/312443/... ? Sauf qu'au lieu de tirer d'une liste, ils tirent d'une collection de listes?
Pas exactement, c'est similaire quand vous allez mélanger les cartes donc j'ai 6 joueurs et j'ai un jeu de cartes qui a 600 cartes Je veux distribuer la carte pour le joueur 2 par 2 ou 3 par 3 ou 6 par 6
@Djalil - si nous avons 4 Cartes,
[A, B, C, D]et 2 joueurs - vous pouvez distribuer 1 par 1 OU 2 par 2. Dans le premier cas, vous obtiendrez[AC, BD]et dans le second cas[AB, CD]. Suis-je bien compris?@Mortz oui mais dans mon cas j'ai 6 joueurs donc moi et un total de 6 cartes donc je ne peux distribuer que par 2 ou 5 pour avoir un nombre pair de cartes
@Djalillounis pouvez-vous mieux expliquer ce que vous essayez de faire? Je ne comprends rien à votre problème en regardant le code et il ne s'exécute même pas car dans la première itération, il lance une NameError (lastwordcombo2 n'est pas défini)
@ JosuéCortina J'ai une liste qui a 60 éléments, je veux distribuer les 60 éléments à 6 listes prendre 2 ou 5 à chaque fois. Vous pouvez supprimer toutes les impressions et simplement imprimer les listes, je modifierai la question
@Djalillounis Au hasard ou dans l'ordre dans lequel ils apparaissent dans la liste d'origine? Et combien d'éléments devraient figurer sur chaque sous-liste? dix? ou ce n'est pas grave?
Non pas au hasard ils seront 2 pour list1 puis 2 suivants pour list2 les 2 suivants pour list3 ... etc le len (sous-liste) = le total de la grande liste / nombre de sous-liste
@Djalillounis si la liste est [1,2,3,4,5,6,7,8,9] et qu'il y a 3 joueurs, cette partition est-elle correcte? 1: [1,2,7,8] 2: [3,4, 9] 3: [5,6]
@ JosuéCortina non ils doivent tous avoir le même nombre de cartes len (list1) = len (list2) = len (list3)
Laissez-nous continuer cette discussion dans le chat .