Seite 1 von 1
zufallszahlen, höhere bevorzugen, aber nicht so krass
Verfasst: Donnerstag 17. Februar 2022, 21:50
von blutigeranfaenger
Hallo zusammen,
ich möchte zufallszahlen erzeugen, mit Bevorzugung der höheren Werte-
Mir ist schon folgendes gelungen:
Code: Alles auswählen
#!/usr/bin/env python3
import random
def linrandHigh(myMin,myMax,myCount):
myErgebnis = myMin
for i in range(1,myCount+1):
myNum = random.uniform(myMin,myMax)
if myNum >myErgebnis:
myErgebnis = myNum
return(myErgebnis)
for i in range(100):
myzahl = linrandHigh(1,5,2)
print(int(myzahl))
Das funktioniert soweit ganz gut, ich hätte nur gerne, dass auch die niedrigen Werte, also auch die 1 eine etwas größere Chance bekommen. Wie könnte ich das anstellen?
Wenn jemand eine Idee und einen Tipp hat, wäre ich sehr dankbar!
Re: zufallszahlen, höhere bevorzugen, aber nicht so krass
Verfasst: Donnerstag 17. Februar 2022, 22:39
von Sirius3
`my` ist immer ein unsinniges Präfix, wenn es nicht auch ein our-Präfix gibt.
Variablennamen schreibt man wie Funktionen komplett klein.
Benutze keine kryptischen Abkürzungen. Was ist ein linr? Und was bedeutet das `high`?
Von 0 bis count-1 zu gehen ist gleich wie von 1 bis count, nur dass zweiteres mehr Code ist, und damit schwieriger zu lesen.
`return` ist keine Funktion, die Klammern also überflüssig.
Code: Alles auswählen
def linr_and_high(min_value, max_value, count):
return max(
random.uniform(min_value, max_value)
for _ in range(count)
)
Warum soll gerade die 1 eine höhere Wahrscheinlichkeit haben? Wenn das min_value größer als 1 ist? Und was ist mit 1.000001?
Normalerweise hat man eine mathematische Funktion, die den uniformen Zahlenraum auf einen nicht-uniformen abbildet.
Re: zufallszahlen, höhere bevorzugen, aber nicht so krass
Verfasst: Freitag 18. Februar 2022, 07:18
von ThomasL
Re: zufallszahlen, höhere bevorzugen, aber nicht so krass
Verfasst: Freitag 18. Februar 2022, 08:22
von blutigeranfaenger
Hallo,
tut mir Leid, wenn die Variablen-Namen nicht so gut lesbar sind. Dass mit dem "my" mache ich, um globale und lokale Variablen nicht durcheinanderzubringen, habe ich mir so angewöhnt, die Großschreibung lässt Python zumindest zu. Klammern nach "return" werde ich in Zukunft lassen.
linrand steht für "linear random". Ansonsten funktioniert das Skript so: es produziert mehrere Zufallszahlen (so viele wie "count" und nimmt von all diesen die höchste. Selbst wenn "count" nur 2 ist, dann kommt die 1 sehr selten vor, ich möchte einfach, dass es öfter kommt. Ich suche so etwas wie eine gewichtete Wahrscheinlichkeit.
Vielleicht gibt es sogar eine built-in Funktion?
Re: zufallszahlen, höhere bevorzugen, aber nicht so krass
Verfasst: Freitag 18. Februar 2022, 08:29
von imonbln
blutigeranfaenger hat geschrieben: Donnerstag 17. Februar 2022, 21:50
Hallo zusammen,
ich möchte zufallszahlen erzeugen, mit Bevorzugung der höheren Werte-
Hierfür gibt es die random.triangular Funktion, mit dieser kannst du das relativ einfach machen, dass Werte in einem bestimmten Bereich bevorzugt werden zum Beispiel im höheren.
Code: Alles auswählen
import random
for _ in range(100):
print(random.triangular(1, 10, 7))
Wenn auch am unteren Ende Werte bevorzugt werden sollen, wird das sowas wie eine Inverse Gaußfunktion werden. Das kann normales Python erstmal nicht, hier könnte die numpy.random.wald, dein Freund sein.
Re: zufallszahlen, höhere bevorzugen, aber nicht so krass
Verfasst: Freitag 18. Februar 2022, 08:44
von blutigeranfaenger
Ok, random.wald werde ich mir anschauen, klingt ja fast romantisch!
Re: zufallszahlen, höhere bevorzugen, aber nicht so krass
Verfasst: Freitag 18. Februar 2022, 09:50
von __blackjack__
@blutigeranfaenger: Also ist das Problem grösser als `my`: Man braucht keine globalen Variablen von lokalen Unterscheiden weil man globale nicht verwendet. Das heisst an jedem Namen würde `my` stehen, was noch mal extra deutlich macht *wie* unsinnig dieser Präfix ist.
Das irgend etwas ”zugelassen” wird ist keine ausreichende Begründung. Die Naturgesetze (Python) lassen es zu das ich meinen Nachbarn umbringe. Die Gesellschaft (Konvention) findet das eher nicht so gut und es gibt Gesetze dagegen (
Style Guide for Python Code).