mfg
Herbert


Der Weg ist ein anderer: DU sagst, welche Ideen du bisher hattest und zeigst möglichst auch schon einen Code-Ansatz dazu. Dann bekommst du sicher Hinweise, ob und was man besser machen könnte ...Blacky hat geschrieben:Hi hat jemand ne Idee wie man ein Galton Brett mit Python macht. Wäre echt nett wenn jemand hier nen Quelltext oder Tipps geben könnte
mfg
Herbert![]()
Du importierst random, nutzt es aber nicht. Möchtest du jetzt die Kugeln zufällig durchlaufen lassen oder möchtest du die mathematische Wahrscheinlichkeit ermitteln? Für zweiteres habe ich mal eben folgenden Code erstellt:Blacky hat geschrieben:Ok hier ist mein Ansatz: Wusste ich nicht das das so geht sry.Code: Alles auswählen
import random def galton(r, l): print "galton(", r, ",", l, ")" if r < l: return None else: if (l == 0) or (r == l): return 1 else: return (galton(r-1, l-1) + galton(r-1, l)) galton(0, 2)
Code: Alles auswählen
def get_probability(rows_total, slot_number):
def fak(value):
[... 4 Zeilen Code aus Lerngründen entfernt ...]
def n_over_k(n, k):
[... 1 Zeile Code aus Lerngründen entfernt ...]
nok = n_over_k(rows_total, slot_number)
return nok * (1.0 / 2 ** rows_total)
rows = 4
slots = [get_probability(rows, i) for i in range(rows + 1)]
print(slots)
Warum 4 Zeilen für fak?/me hat geschrieben:Code: Alles auswählen
def get_probability(rows_total, slot_number): def fak(value): [... 4 Zeilen Code aus Lerngründen entfernt ...] def n_over_k(n, k): [... 1 Zeile Code aus Lerngründen entfernt ...] nok = n_over_k(rows_total, slot_number) return nok * (1.0 / 2 ** rows_total) rows = 4 slots = [get_probability(rows, i) for i in range(rows + 1)] print(slots)
Code: Alles auswählen
from operator import mul
def fac(num):
return reduce(mul, xrange(1, num+1))
Viel zu lang ...derdon hat geschrieben: Warum 4 Zeilen für fak?reicht doch auch.Code: Alles auswählen
from operator import mul def fac(num): return reduce(mul, xrange(1, num+1))
Code: Alles auswählen
f=lambda x:x*f(x-1)if x else 1
Viel zu unverständlich und sieht noch dazu echt ugly aus.numerix hat geschrieben:Viel zu lang ...derdon hat geschrieben: Warum 4 Zeilen für fak?reicht doch auch.Code: Alles auswählen
from operator import mul def fac(num): return reduce(mul, xrange(1, num+1))
reicht doch auch.Code: Alles auswählen
f=lambda x:x*f(x-1)if x else 1
Code: Alles auswählen
import this
Sehe ich nicht so. Es ist eine saubere, simple Umsetzung der rekursiven Definition der Fakultät. Und der "reduce - mul - xrange"-Variante an Verständlichkeit ganz gewiss überlegen.Masaru hat geschrieben:Viel zu unverständlich und sieht noch dazu echt ugly aus.
Nun, die 4 Zeilen liegen wohl in erster Linie daran, dass 25 Jahre mit anderen Programmiersprachen so schwer aus dem Kopf gehen.derdon hat geschrieben:Warum 4 Zeilen für fak?reicht doch auch.Code: Alles auswählen
from operator import mul def fac(num): return reduce(mul, xrange(1, num+1))
Das sehe ich wiederrum nicht so ... Deine lambda-Variante mag zwar eine "Alternative" sein, aber ist sie mit Sicherheit nicht "überlegen": völliger Quatschnumerix hat geschrieben:.... Und der "reduce - mul - xrange"-Variante an Verständlichkeit ganz gewiss überlegen. ....
Nettes Beispiel, aber ein Entwickler der die Fakultät ernsthaft via Rekursion berechnet gehört geteert und gefedert.numerix hat geschrieben:Code: Alles auswählen
f=lambda x:x*f(x-1)if x else 1
Code: Alles auswählen
f = lambda x: reduce(__import__('operator').mul, xrange(1, x+1))
Code: Alles auswählen
import gmpy
n_over_k = gmpy.bincoef
Ha, wieder was gelernt. Merci!BlackJack hat geschrieben:Aber warum überhaupt die Fakultät implementieren:
Code: Alles auswählen
import gmpy n_over_k = gmpy.bincoef
Das sollte auch kein Beispiel für eine performante Implementation sein. Es ging in dem Zusammenhang ja um die Kürze des Codes und ich bin nach wie vor der Ansicht, dass das mal ein Beispiel ist, dass ein Code kurz UND verständlich sein kann (auch wenn Masaru das für "Quatsch" hält). Aus meiner Sicht ist das ein Stück eleganter Code (klingt natürlich doof, wenn man es selbst präsentiert, aber ich bin nicht mal sicher, ob ich das nicht mal woanders gesehen habe und davon inspiriert wurde).BlackJack hat geschrieben:@numerix: Aber das ist so rekursiv. Würde ich in Python nicht verwenden.
Weil es Spaß macht.BlackJack hat geschrieben:Aber warum überhaupt die Fakultät implementieren:
Code: Alles auswählen
from math import factorial