Seite 1 von 1

bis unendlich variablen in eine liste zu packen am besten in json

Verfasst: Dienstag 25. Dezember 2018, 00:57
von SmombieTV
Das ist der code:
# Würfeln-Zufall
from random import randint
n_Nochmal = True
while n_Nochmal:
b = 0
Ende = True
Anzahl_Würfel = float(input("Wie viele Würfel? "))
Anzahl_Augenzahl = float(input("Augenzahl der/s Würfel/s? "))
Anzahl_Würfe = float(input("Anzahl Würfe? "))
a = Anzahl_Würfel * Anzahl_Augenzahl
while Ende:
Zufall = randint(Anzahl_Würfel, a)
print(Zufall)
b += 1
if b == Anzahl_Würfe :
Nochmal = input("Nochmal mit selben Einstellungen?(y/n) ")
if Nochmal != "y":
Ende = False
Nochmal = input("Nochmal mit anderen Einstellungen?(y/n) ")
if Nochmal != "y":
n_Nochmal = False
else:
break
else:
b = 0

Und ich würde gerne an der makierten stelle eine liste einbauen die zält wie oft und was rausgekommen
ist.
für Ideen wonach ich kucken könnte und script vorschläge Danke. :D

Re: bis unendlich variablen in eine liste zu packen am besten in json

Verfasst: Dienstag 25. Dezember 2018, 01:58
von __blackjack__
@SmombieTV: Der Code in Code-Tags wäre schön, so dass man die nicht ganz unwichtige Einrückung auch sehen kann.

Mal davon abgesehen das `Ende` ein komischer Name für ein Flag ist das genau das Gegenteil aussagt, würde man hier eine ``for`` statt einer ``while``-Schleife verwenden.

`collections.defaultdict()` wäre wohl was Du suchst.

Re: bis unendlich variablen in eine liste zu packen am besten in json

Verfasst: Dienstag 25. Dezember 2018, 08:58
von Sirius3
Dass in der innersten Schleife entschieden wird, was weiter außen passieren soll, ist etwas seltsam, dann wird die Schleife mal mit Ende = False und mal mit break verlassen, solche Inkonsistenzen will man beim Programmieren vermeiden, weil sich der Leser fragt, was ist da der Unterschied.
Was soll das n bei n_Nochmal? a und b sind schlechte Namen, weil zu kurz, a würde z.B. besser 'Maximal_Augenzahl` heißen. `Zufall` ist kein Zufall sondern eine zufällig ermittelte Zahl.

Du willst die Summe mehrerer Würfel gleichzeitig ermitteln? Das ist falsch, weil die Zahlen nicht gleich häufig auftreten.

`collections.Counter` könnte man zum Zählen verwenden.

Re: bis unendlich variablen in eine liste zu packen am besten in json

Verfasst: Dienstag 25. Dezember 2018, 10:05
von SmombieTV
Danke __blackjack__ für deine Hilfe habe es gerade ausprobiert und es funktioniert super

Code: Alles auswählen

# Würfeln-Zufall
from random import randint
from collections import defaultdict
d = defaultdict(int)
n_Nochmal = True
while n_Nochmal:
    b = 0
    Ende = True
    Anzahl_Würfel = float(input("Wie viele Würfel? "))
    Anzahl_Augenzahl = float(input("Augenzahl der/s Würfel/s? "))
    Anzahl_Würfe = float(input("Anzahl Würfe? "))
    a = Anzahl_Würfel * Anzahl_Augenzahl
    while Ende:
        Zufall = randint(Anzahl_Würfel, a)
        d[Zufall] += 1
        b += 1
        if b == Anzahl_Würfe :
            print (d)
            Nochmal = input("Nochmal mit selben Einstellungen?(y/n) ")
            if Nochmal  != "y":
                Ende = False
                Nochmal = input("Nochmal mit anderen Einstellungen?(y/n) ")
                if Nochmal  != "y":
                    n_Nochmal = False
                else:
                    break
            else:
                b = 0
Ich programmiere jetzt erst seit langen wieder etwas Python und da hat es mir sehr geholfen Danke.
Wenn ihr noch ne Idee habt wie man den Output in einer reinfolge ausgeben kann.
wäre nice.
:D

Re: bis unendlich variablen in eine liste zu packen am besten in json

Verfasst: Dienstag 25. Dezember 2018, 10:07
von SmombieTV
Oh und um die Variablen kümmere ich mich noch

Re: bis unendlich variablen in eine liste zu packen am besten in json

Verfasst: Dienstag 25. Dezember 2018, 11:39
von Sirius3
@SmombieTV: hauptsächlich geht es ja darum, die Fehler zu beseitigen, weniger um gute Variablennamen, wobei `d` wirklich nicht gut ist.

Re: bis unendlich variablen in eine liste zu packen am besten in json

Verfasst: Dienstag 25. Dezember 2018, 12:17
von SmombieTV
Habe jetzt den Script nochmal überarbeitet:

Code: Alles auswählen

# Würfeln-Zufall
from random import randint
from collections import defaultdict
d = defaultdict(int)
b = 0
Ende = True
Anzahl_Würfel = int(input("Wie viele Würfel? "))
Anzahl_Augenzahl = float(input("Augenzahl der/s Würfel/s? "))
Anzahl_Würfe = float(input("Anzahl Würfe? "))
while Ende:
    Zufall = 0
    for i in range(Anzahl_Würfel):
        Zufall += randint(1, Anzahl_Augenzahl)
    d[Zufall] += 1
    b += 1
    if b == Anzahl_Würfe :
        print (d)
        Nochmal = input("Nochmal mit selben Einstellungen?(y/n) ")
        if Nochmal  != "y":
            Ende = False
        else:
            b = 0
Ich finde, der sieht besser aus und gibt echtere Ergebnisse aus, mir war es leid wegen der Schule immer zu würfeln immer 100 mal mit unterschiedlich vielen Würfeln langweilig, cooden macht mehr Spaß.
Lade ich noch hoch auf Github.

Re: bis unendlich variablen in eine liste zu packen am besten in json

Verfasst: Dienstag 25. Dezember 2018, 12:59
von Sirius3
Eine for-Schleife ist immer noch besser, wenn man schon im vorhinein weiß, wie oft etwas durchlaufen wird.

Code: Alles auswählen

# Würfeln-Zufall
from random import randint
from collections import Counter

anzahl_würfel = int(input("Wie viele Würfel? "))
anzahl_augenzahl = int(input("Augenzahl der/s Würfel/s? "))
anzahl_würfe = int(input("Anzahl Würfe? "))

wahrscheinlichkeiten = Counter()
while True:
    wahrscheinlichkeiten.update(
        sum(randint(1, anzahl_augenzahl) for _ in range(anzahl_würfel))
        for _ in range(anzahl_würfe)
    )
    print(wahrscheinlichkeiten)
    nochmal = input("Nochmal mit selben Einstellungen?(y/n) ")
    if nochmal != "y":
        break