Hey Nochmal,
ich habe schonmal einen Artikel verfasst, der sich mit diesem Problem befasste. Fogendes: ich habe bestimmte Teams, die ich in Gruppen aufteilen will. Doch irgendwie läuft etwas im Programm schief. Ich kriege zwar keine Fehlermeldung aber die Gruppeneinteilung ist ungleichmäßig. Vielleicht muss ich beim else noch etwas hinzufügen. Im Code sollte man das vielleicht finden können. Würde mich über eine Antwort freuen. Hier kann es so aussehen als wären die Einrückungen falsch, sind sie aber nicht.
#Importierungen
import random
#Gruppen & Teilnehmer
gruppen = ["Gruppe A", "Gruppe B", "Gruppe C", "Gruppe D"]
members = ["Na'Vi", "Virtus Pro", "Mousesports", "FaZe Clan", "Astralis", "Ninjas in Pyjamas",
"Team Liquid", "Fnatic", "Team Vitality", "Espada", "Ence", "Cloud 9", "G2 Esports",
"OG", "Furia", "Complexity"]
#Rechnungsvariablen
max_a = int(len(members)) / int(len(gruppen))
max_b = int(len(members)) / int(len(gruppen))
max_c = int(len(members)) / int(len(gruppen))
max_d = int(len(members)) / int(len(gruppen))
max_e = int(len(members)) / int(len(gruppen))
max_f = int(len(members)) / int(len(gruppen))
max_g = int(len(members)) / int(len(gruppen))
max_h = int(len(members)) / int(len(gruppen))
max_i = int(len(members)) / int(len(gruppen))
max_j = int(len(members)) / int(len(gruppen))
#Gruppen
Gruppe_A = []
Gruppe_B = []
Gruppe_C = []
Gruppe_D = []
Gruppe_E = []
Gruppe_F = []
Gruppe_G = []
Gruppe_H = []
Gruppe_I = []
Gruppe_J = []
print(int(len(members)))
for i in range(int(len(members))):
name = random.choice(members)
members.remove(name)
gruppe = random.choice(gruppen)
if gruppe == "Gruppe A" and len(Gruppe_A) < max_a:
if len(Gruppe_A) == max_a:
gruppen.remove("Gruppe A")
else:
Gruppe_A.append(name)
if gruppe == "Gruppe B" and len(Gruppe_B) < max_b:
if len(Gruppe_B) == max_a:
gruppen.remove("Gruppe B")
else:
Gruppe_B.append(name)
if gruppe == "Gruppe C" and len(Gruppe_C) < max_c:
if len(Gruppe_C) == max_c:
gruppen.remove("Gruppe C")
else:
Gruppe_C.append(name)
if gruppe == "Gruppe D" and len(Gruppe_D) < max_d:
if len(Gruppe_D) == max_c:
gruppen.remove("Gruppe D")
else:
Gruppe_D.append(name)
else:
pass
print(Gruppe_A)
print(Gruppe_B)
print(Gruppe_C)
print(Gruppe_D)
Auslosung mit Gruppen
Wenn man anfängt, Variablennamen durchzunummerieren (ähm, durchzubuchstabieren), dann will man eigentlich eine passende Datenstruktur benutzen, z.B. Listen.
Dann braucht man auch nicht 90% des Codes durch kopieren und einzelne Zeichen ändern, erzeugen.
Die ganzen max_y-Variablen haben den selben Wert, den braucht es also auch nur einmal. len liefert schon ein int, das nochmal umzuwandeln, ist unnötig.
Eine for-Schleife über einen Index ist ein Code-Smell. Hier möchtest Du erst die Members durchwürfeln (random.shuffle) und dann alle Member mit einer Schleife durchgehen.
Bleibt also das:
Jetzt bleibt noch das Problem, wenn eine ausgewählte Gruppe schon voll ist, dass dann der Name weggeworfen wird. Du also gleich nach dem Füllen prüfen mußt, ob die Maximalanzahl erreicht wurde.
Dann braucht man auch nicht 90% des Codes durch kopieren und einzelne Zeichen ändern, erzeugen.
Die ganzen max_y-Variablen haben den selben Wert, den braucht es also auch nur einmal. len liefert schon ein int, das nochmal umzuwandeln, ist unnötig.
Eine for-Schleife über einen Index ist ein Code-Smell. Hier möchtest Du erst die Members durchwürfeln (random.shuffle) und dann alle Member mit einer Schleife durchgehen.
Bleibt also das:
Code: Alles auswählen
#Importierungen
import random
members = ["Na'Vi", "Virtus Pro", "Mousesports", "FaZe Clan", "Astralis", "Ninjas in Pyjamas",
"Team Liquid", "Fnatic", "Team Vitality", "Espada", "Ence", "Cloud 9", "G2 Esports",
"OG", "Furia", "Complexity"]
#Rechnungsvariablen
alle_gruppen = [[] for _ in range(4)]
maximal_anzahl = len(members) / len(alle_gruppen)
print(len(members))
random.shuffle(members)
gruppen = list(alle_gruppen)
for name in members:
gruppe = random.choice(gruppen)
if len(gruppe) < maximal_anzahl:
gruppe.append(name)
else:
gruppen.remove(gruppe)
print(alle_gruppen)