@__deets__:
Ja das meinte ich auch, also wenn man zum Beispiel nur Ledersachen hat, dass diese dann in der Reihenfolge dargestellt werden, wie sie in der
value des
dictionarys vorkommen. Das wäre mein Wunsch.
Hier mal der komplette Code:
Code: Alles auswählen
from numpy.random import choice
from collections import defaultdict
gegenstände = {"Normal":["Lederhelm", "Lederhose", "Lederschuhe"],
"Selten":["Eisenhelm", "Eisenhose", "Eisenschuhe"],
"Sehr selten":["Stahlhelm", "Stahlhose", "Stahlschuhe"],
"Legendär":["Diamanthelm", "Diamanthose", "Diamantschuhe"]}
wahrscheinlichkeiten = {"Normal":0.55,
"Selten":0.3,
"Sehr selten":0.1,
"Legendär":0.05}
class Spieler:
def __init__(self):
self.inventar = []
self.guthaben = 10
def gebe_x_zufällige_items(self,anzahl):
if self.guthaben > 0 and (self.guthaben - anzahl) >= 0:
self.guthaben -= anzahl
for _ in range(0, anzahl):
gegenstand = choice(gegenstände[choice(list(gegenstände.keys()), p=list(wahrscheinlichkeiten.values()))])
self.inventar.append(gegenstand)
print(f"Du öffnest eine Kiste und bekommst {gegenstand}!")
else:
print(f"Nicht genug Guthaben, du hast nur {self.guthaben} Guthaben.")
def zeige_inventar(self):
inventar_mit_anzahl = defaultdict(int)
for item in self.inventar:
inventar_mit_anzahl[item] += 1
for key, value in sorted(inventar_mit_anzahl.items(), key=item: wahrscheinlichkeiten[item[0]]):
print(f"{key:<{max(map(len, gegenstände))}} {value}")
def main():
spieler = Spieler()
while True:
auswahl = int(input("""
Was möchtest du tun?
1 - Kisten öffnen
2 - Inventar anzeigen
>"""))
if auswahl == 1:
anzahl_kisten = int(input("Wie viele Kisten willst du öffnen?: "))
spieler.gebe_x_zufällige_items(anzahl_kisten)
elif auswahl == 2:
spieler.zeige_inventar()
main()
und die Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Users\xxx\Desktop\lootbox.py", line 56, in <module>
main()
File "C:\Users\xxx\Desktop\lootbox.py", line 54, in main
spieler.zeige_inventar()
File "C:\Users\xxx\Desktop\lootbox.py", line 36, in zeige_inventar
for key, value in sorted(inventar_mit_anzahl.items(), key=lambda item: wahrs
cheinlichkeiten[item[0]]):
File "C:\Users\xxx\Desktop\lootbox.py", line 36, in <lambda>
for key, value in sorted(inventar_mit_anzahl.items(), key=lambda item: wahrs
cheinlichkeiten[item[0]]):
KeyError: 'Lederschuhe'
Hier mal ein Beispiel wie das ganze ca. dargestellt werden soll (nach 100 Kisten geöffnet habe ich folgende Anzahl:
Code: Alles auswählen
Diamanthelm 03
Diamanthose 02
Eisenhelm 09
Eisenhose 11
Eisenschuhe 14
Lederhelm 18
Lederhose 18
Lederschuhe 20
Stahlhelm 01
Stahlhose 01
Stahlschuhe 03
und würde es gerne hinbekommen, dass es am Ende so aussieht:
Code: Alles auswählen
Lederhelm 18
Lederhose 18
Lederschuhe 20
Eisenhelm 09
Eisenhose 11
Eisenschuhe 14
Stahlhelm 01
Stahlhose 01
Stahlschuhe 03
Diamanthelm 03
Diamanthose 02