Python Würfel mit Zähler?

3 Antworten

Wie du festgestellt hast, gibt dir random.uniform ein float. Es ist sinnvoller, gleich die passende Funktion zu verwenden.

Das Import-Statement hat nichts in einer Schleife verloren.

Für das Aufzeichnen der Verteilung gibt es verschiedene Wege. Wer schlau ist, liest die Dokumentation und stellt fest, dass es dafür sogar einen eigenen Datentyp gibt.

Da es sich hier aber einfach um Ganzzahlen handelt, kann man auch eine Liste dafür verwenden. Beispiel:

import random
distribution = [0 for _ in range(7)]
for _ in range(100):
  die = random.randint(1, 6)
  distribution[die] += 1

Jetzt haben wir eine Liste mit der Verteilung (und einem Bonusfeld auf Position 0, das wir ignorieren). Die Liste können wir halbwegs hübsch z.B. so ausgeben:

for i in range(1, 7):
  print(i, ": ", distribution[i])

Profis würden das schöner formatieren, am besten per f-String, aber wir müssen ja nicht gleich alle Geschütze auffahren.

Wie gesagt, es gibt einige Lösungswege.

Zunächst einmal ein paar andere Bemerkungen:

  • Du solltest den Import aus dem random-Modul am Anfang deines Codes schreiben, nicht mittendrin. (Vor allem nicht in der Schleife, wo das etliche Male ausgeführt wird.)
  • Du brauchst nicht alles aus dem random-Modul zu importieren. Sinnvoller ist es evtl. nur das zu importieren, was du benötigst. (Im konkreten Fall also eher: from random import uniform)
  • Statt mit der uniform()-Funktion eine Gleitkommazahl zu erzeugen und diese dann zu einer ganzen Zahl zu runden, könntest du doch auch einfach mit der randint()-Funktion direkt ganze Zahlen erzeugen.
  • Des Weiteren ist es wenig sinnvoll und für Leser deines Codes evtl. verwirrend, wenn du die Zählvariable zahl während der Schleifendurchläufe anderweitig überschreibst. Verwende lieber eine andere Variable, oder nutze einfach _ als „Müllvariable“, wenn du die Werte nicht benötigst.

Dementsprechend würde ich demnach eher empfehlen:

from random import randint
for _ in range(1, 101):
    zahl = randint(1, 6)
    print(zahl)

============

Zur eigentlichen Antwort auf deine Frage...

Du könntest eine Liste oder ein Dictionary anlegen, in der du die Anzahlen abspeicherst. In jedem Schritt erhöhst du dann den entsprechenden Eintrag um 1. Am Ende lässt du dir die Einträge ausgeben.

Beispielsweise mit Hilfe eines Dictionarys...

from random import randint

anzahl = {k: 0 for k in range(1, 7)}
# Alternativ könnte man auch explizit
# anzahl = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0}
# schreiben.

for _ in range(1, 101):
    zahl = randint(1, 6)
    print(zahl)
    anzahl[zahl] += 1
print(anzahl)

Bzw. deinen Code entsprechend ergänzt...

anzahl = {k: 0 for k in range(1, 7)}
for zahl in range(1, 101):
    from random import *
    zahl = int(uniform(1, 7))
    print(zahl)
    anzahl[zahl] += 1
print(anzahl)

============

Alternativ könntest du auch eine Liste mit den Würfelergebnissen erzeugen, und dann mit der list.count()-Methode dir die jeweilige Anzahl ausgeben lassen.

from random import randint
ergebnis = [randint(1, 6) for _ in range(100)]
anzahl = {k: ergebnis.count(k) for k in range(1, 7)}

print("Liste der Würfelergebnisse:")
print(ergebnis)

print("Absolute Häufigkeiten der Würfelergebnisse:")
print(anzahl)
Siegero10 
Fragesteller
 23.09.2023, 18:31

Vielen Dank!

0

Du solltest Module am Anfang deines Codes importieren. Nicht mitten in einer Schleife.

Um zu schauen, wie oft welche Zahl gewürfelst wurde, könntest du eine Liste der Lange 6 nehmen, wo du bei jedem Wurf den jeweiligen Eintrag um 1 erhöhst, oder du speicherst das in einem Dictionary ab.

Siegero10 
Fragesteller
 23.09.2023, 17:37

Wie kann man das in einem Dictionary abspeichern?

0
Jangler13  23.09.2023, 17:38
@Siegero10

Du erstellst ein Dictionary, wo du zuerst die Werte für die Zahlen 1 bis 6 jeweils 0 einsetzt, dann erhöhst bei jedem würfeln den jeweiligen Eintrag um 1

0