@flopi: Aufbauend auf der Antwort von rogerb: Funktionen (und Methoden) werden in der Regel nach der Tätigkeit benannt die sie durchführen. Damit weiss der Leser was er erwarten kann und man kann Funktionen und Methoden einfach(er) von eher passiven Werten unterscheiden. `spiel`, `spielserie`, und `häufigkeit` sind keine Tätigkeiten und der Leser würde da eher Objekte erwarten die ein Spiel, eine Serie oder eine Häufigkeit als Wert repräsentieren. Bei letzterem zum Beispiel eine ganze Zahl — eben die Häufigkeit von irgend etwas.
Einbuchstabige Namen sind in der Regel keine guten Namen und Namen sollten um so besser sein/werden, je weitreichender ihre Sichtbarkeit ist. Konstanten beispielsweise sollte man auf keinen Fall `x` nennen — es sei denn es handelt sich um einen konstanten Wert für eine X-Koordinate, was aber eher ungewöhnlich wäre. Und Konstantennamen werden per Konvention KOMPLETT_GROSS geschrieben. Ein Blick in den
Style Guide for Python Code ist sinnvoll investierte Zeit.
Würfelergebnisse sind ja eigentlich Zahlen und keine Zeichen. Die Konstante mit den möglichen Ergebnissen würde ich also eher als Liste anlegen. Für die Darstellung braucht man die dann als Zeichenkette, wenn man nicht will, das `matplotlib` die Werte als Zahl behandelt. Zum Beispiel wenn man die Reihenfolge in der Darstellung selbst bestimmen möchte. Das wandelt man dann aber dort um, wo man das für die Darstellung braucht. Innerhalb eines Programms sollten Werte einen Typ haben, der zum Wert passt, und nicht einen der für die Ein- oder Ausgabe praktisch ist oder benötigt wird.
Man sollte sich bei der Namensgebung zwischen Englisch oder Deutsch entscheiden. Am besten Englisch. Das gibt weniger Probleme bei der Namensgebung von Kontainerobjekten, wo man in der Regel die Mehrzahl von dem Namen bildet, der für ein einzelnes Element sinnvoll wäre. Im Englischen ist das in der Regel ein Mehrzahl-”s” anhängen. Im Deutschen gibt es deutlich mehr Fälle von Mehrzahl ist identisch mit Einzahl, wo man sich dann irgend etwas ausdenken muss wie man mit diesen Fällen umgehen will.
Statt 6 mal `plot()` aufzurufen, würde ich das nur einmal machen, denn ich sehe bei diesem Diagramm keinen Sinn in verschiedenen Farben für die einzelnen Werte. Das ist auch unüblich für Histogramme dieser Art. Womit auch noch ein Stichwort gefallen wäre mit dem Du es Dir einfacher machen kannst: Histogramm. Ist ein verbreiteter Diagrammtyp. Da gibt's auch was von Ratio…, äh, `matplotlib` für.
Ich habe mir erlaubt die Darstellung der Würfelseiten etwas weniger langweilig zu gestalten. Eventuell muss man da die Schriftgrösse noch ein bisschen vergrössern. Und man kann natürlich generell noch ein wenig an der Darstellung von dem Diagramm schrauben. Unnötiges weg lassen, nötiges hinzufügen, weniger Platz verschwenden, eine Linie einzeichnen wo denn die Gleichverteilung wäre, und so weiter.
Code: Alles auswählen
#!/usr/bin/env python3
from random import choices
import matplotlib.pyplot as plt
DIE_VALUES = range(1, 7)
def play_games(count):
return choices(DIE_VALUES, k=count)
def count_values(possible_values, values):
values_and_counts = []
for value in possible_values:
count = values.count(value)
print("Häufigkeit", value, "=", count)
values_and_counts.append((value, count))
return values_and_counts
def show_chart(values_and_counts):
#
# Die Würfelwerte sollen von oben nach unten aufsteigend dargestellt werden.
#
values_and_counts = list(reversed(values_and_counts))
plt.barh(
#
# TODO Beschriftung der Würfelwerte eventuell etwas grösser machen.
#
[chr(ord("⚀") + (value - 1) for value, _ in values_and_counts],
[count for _, count in values_and_counts],
)
plt.show()
def main():
results = play_games(1000)
values_and_counts = count_values(DIE_VALUES, results)
show_chart(values_and_counts)
if __name__ == "__main__":
main()