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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SmombieTV
User
Beiträge: 7
Registriert: Samstag 24. Februar 2018, 00:25

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
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
SmombieTV
User
Beiträge: 7
Registriert: Samstag 24. Februar 2018, 00:25

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
SmombieTV
User
Beiträge: 7
Registriert: Samstag 24. Februar 2018, 00:25

Oh und um die Variablen kümmere ich mich noch
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

@SmombieTV: hauptsächlich geht es ja darum, die Fehler zu beseitigen, weniger um gute Variablennamen, wobei `d` wirklich nicht gut ist.
SmombieTV
User
Beiträge: 7
Registriert: Samstag 24. Februar 2018, 00:25

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.
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

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
Antworten