Hallo Zusammen,
ich bin durch Studium neu Anfänger in Python. Derzeit muss ich für meine Aufgaben eine Zufallszahl generieren in einem bestimmmten Bereich.
Das Modul Random darf nicht genutzt werden!
Über einen Algorithmus lasse ich mir die Zahl erstellen - ist zwar immer die gleiche, wenn ich mit der gleichen Starte aber das ist soweit ok und auch Sinn der Aufgabe.
Nun soll geprüft werden, ob diese Zahl innerhalb eines Intervalls liegt. Die ober und untergrenze soll durch Parameter "charly" vom Typ Tupel festgelegt werden und sollte charly == None sein gibt es keine Beschränlung.
Hier sammeln sich nun die Fragezeichen:
Ist es Richtig, dass ich einen Intervall mit range(x, y) definiere? Oder for x in range(x, y)?
Die Verbindung zwischen Intervall / Tupel / Parameter "charly" == None wird mir nicht wirklich klar.
Unabhängig davon diese Frage:
Und gibt es eine Möglichkeit wenn ich einen Bereich habe auch wieder definiert mit (x, y), dass er mir 10 zufällige Zahlen von dort ausgibt mit prüfung auf gleichheit?
Hier müsste ich doch auch mir range(10) die Zehn zahlen ausgeben können, dann in eine Variable schreiben und diese dann prüfen, ob sie schonmal vorgekommen ist.
Vielleicht kann mir ja jemand helfen - google - schafft es derzeit nicht :/.
greez m3rl1n
Zufallszahlgenerator
Hallo und willkommen im Forum!
Tupel: (Untergrenze, Obergrenze)
Und wenn du statt des Tupels aus Ober- und Untergrenze None übergibst, dann soll wohl keine Prüfung stattfinden.
Aber noch eine ganz allgemeine Frage: warum brauchst du überhaupt eine Prüfung, ob eine Zufallszahl in einem bestimmten Bereich liegt? Du ziehst hoffentlich nicht so lange Zufallszahlen, bis du eine aus dem geforderten Intervall hast und gibst diese dann zurück.
Du sollst wohl testen, ob die generierte Zahl in einem gewissen Bereich liegt. Dazu verwendest du einfach die üblichen Vergleichsoperatoren:m3rl1n hat geschrieben:Ist es Richtig, dass ich einen Intervall mit range(x, y) definiere? Oder for x in range(x, y)?
Code: Alles auswählen
low <= x < highIntervall: Ober- und Untergrenzem3rl1n hat geschrieben:Die Verbindung zwischen Intervall / Tupel / Parameter "charly" == None wird mir nicht wirklich klar.
Tupel: (Untergrenze, Obergrenze)
Und wenn du statt des Tupels aus Ober- und Untergrenze None übergibst, dann soll wohl keine Prüfung stattfinden.
Das kann man so einfach nicht beantworten. Wie man das am besten löste, hängt von der Größe des Intervalls und der Größe der Stichprobe ab. Zu dem Thema gibt es aber genug Literatur, ansonsten kannst du dir mal den Code des random-Moduls anschauen.m3rl1n hat geschrieben:Und gibt es eine Möglichkeit wenn ich einen Bereich habe auch wieder definiert mit (x, y), dass er mir 10 zufällige Zahlen von dort ausgibt mit prüfung auf gleichheit?
Hier müsste ich doch auch mir range(10) die Zehn zahlen ausgeben können, dann in eine Variable schreiben und diese dann prüfen, ob sie schonmal vorgekommen ist.
Aber noch eine ganz allgemeine Frage: warum brauchst du überhaupt eine Prüfung, ob eine Zufallszahl in einem bestimmten Bereich liegt? Du ziehst hoffentlich nicht so lange Zufallszahlen, bis du eine aus dem geforderten Intervall hast und gibst diese dann zurück.
Zuletzt geändert von EyDu am Montag 11. November 2013, 12:51, insgesamt 1-mal geändert.
Das Leben ist wie ein Tennisball.
-
BlackJack
@m3rl1n: `range()` erzeugt eine Liste mit Zahlen oder einen Iterator über Zahlen, je nach dem welche Python-Version man verwendet. Das ist eher ungeeignet um ein Intervall zu prüfen. Das würde man ganz einfach mit der Ober- und Untergrenze und Vergleichsoperationen machen. Wobei ich dafür hier eigentlich keine Anwendung sehe, denn wenn man eine Zahl in einem bestimmten Intervall erzeugt, dann hat man ja eine Zahl in dem Intervall erzeugt, also man *weis* bereits das die Zahl in dem Intervall ist. Was *keine* gute Idee ist, wäre eine Schleife die solange Zufallszahlen erzeugt bis endlich eine Dabei ist, die im Intervall liegt.
Wer auch immer den Namen `charly` für das Argument vorgeschlagen hat gehört geteert und gefedert.
Durch welche Daten wird ein Intervall beschrieben? Was kann man in einem Tupel speichern? Und wenn es keine Beschränkung gibt, dann soll halt `None` statt eines Tupels übergeben werden. Was mir nicht so ganz klar ist was „keine Beschränkung” bedeutet, weil ganze Zahlen in Python beliebig gross (klein) sein können. Das wird eigentlich nur durch den verfügbaren Arbeitsspeicher begrenzt.
Zur letzten Frage: Kommt drauf an was Du dann eigentlich machen willst. Man könnte zum Beispiel ein `set` verwenden um sich die schon „gewürfelten” Zahlen zu merken und effizient zu testen ob eine Zahl in dieser Menge enthalten ist. Falls die Frage ist „gib mit n ganze Zufallszahlen aus dem Intervall (x, y)”, dann könnte es auch effizienter sein alle Zahlen aus dem Intervall in einer Liste zu erzeugen und diese dann mit einem Algorithmus der den Zufallszahlengenerator verwendet zu mischen und davon dann die ersten n Elemente zu nehmen.
Bei Deinem Zufallszahlenalgorithmus solltest Du auch aufpassen, dass die Zahlen gleichverteilt sind, also jede Zahl möglichst gleich wahrscheinlich ist. Das würde ich testen.
Wer auch immer den Namen `charly` für das Argument vorgeschlagen hat gehört geteert und gefedert.
Durch welche Daten wird ein Intervall beschrieben? Was kann man in einem Tupel speichern? Und wenn es keine Beschränkung gibt, dann soll halt `None` statt eines Tupels übergeben werden. Was mir nicht so ganz klar ist was „keine Beschränkung” bedeutet, weil ganze Zahlen in Python beliebig gross (klein) sein können. Das wird eigentlich nur durch den verfügbaren Arbeitsspeicher begrenzt.
Zur letzten Frage: Kommt drauf an was Du dann eigentlich machen willst. Man könnte zum Beispiel ein `set` verwenden um sich die schon „gewürfelten” Zahlen zu merken und effizient zu testen ob eine Zahl in dieser Menge enthalten ist. Falls die Frage ist „gib mit n ganze Zufallszahlen aus dem Intervall (x, y)”, dann könnte es auch effizienter sein alle Zahlen aus dem Intervall in einer Liste zu erzeugen und diese dann mit einem Algorithmus der den Zufallszahlengenerator verwendet zu mischen und davon dann die ersten n Elemente zu nehmen.
Bei Deinem Zufallszahlenalgorithmus solltest Du auch aufpassen, dass die Zahlen gleichverteilt sind, also jede Zahl möglichst gleich wahrscheinlich ist. Das würde ich testen.
Okay, vielen Dank für die schnellen Antworten.
Wir haben für die Berechnung der Zahl diese Formel:
xi = (a*xi + c)%m
Habe ich auch häufiger im Internet gefunden, dass Problem ist das unsere Zahlen extrem groß sind (finde ich)
a = 42365148523
c= 15
m=2**48
Dadurch kommen lange Zahlen zusammen. Bisher mache ich es so das ich die Grenzen vom Nutzer selber definieren lasse. Dann mache ich auch gar nicht soviel falsch ich
gebe Charly die beiden Werde mit welche ich vom Nutzer definieren lasse und wenn kein Wert definiert ist dann == None.
Ich habe es jetzt so gemacht das ich Charly = [ug, og] habe. Im Aufurf des Moduls welches wir schreiben sollten steht
Wenn ich das richtig verstehe wird charly hier sowieso auf None gesetzt? Dann wäre meine Grenzdefinition vorher wertlos?
Nochmals vielen Dank nun muss ich das neue wissen nur noch in mein Programm überführen
.
Denke mir fehlen 1-2 Basics was die Begrifflichkeiten angeht, sorry dafür.
grüße
Wir haben für die Berechnung der Zahl diese Formel:
xi = (a*xi + c)%m
Habe ich auch häufiger im Internet gefunden, dass Problem ist das unsere Zahlen extrem groß sind (finde ich)
a = 42365148523
c= 15
m=2**48
Dadurch kommen lange Zahlen zusammen. Bisher mache ich es so das ich die Grenzen vom Nutzer selber definieren lasse. Dann mache ich auch gar nicht soviel falsch ich
gebe Charly die beiden Werde mit welche ich vom Nutzer definieren lasse und wenn kein Wert definiert ist dann == None.
Ich habe es jetzt so gemacht das ich Charly = [ug, og] habe. Im Aufurf des Moduls welches wir schreiben sollten steht
Code: Alles auswählen
def alpha_n(charly:tuple = None) -> int:Das hat mir gefehlt an wissen für mich ist ein Intervall iwie anders definiert gewesen.Intervall: Ober- und Untergrenze
Tupel: (Untergrenze, Obergrenze)
Und wenn du statt des Tupels aus Ober- und Untergrenze None übergibst, dann soll wohl keine Prüfung stattfinden.
Nochmals vielen Dank nun muss ich das neue wissen nur noch in mein Programm überführen
Denke mir fehlen 1-2 Basics was die Begrifflichkeiten angeht, sorry dafür.
grüße
`None` ist der Defaultwert. Wenn du keinen Parameter angibst, dann wird `None` verwendet.m3rl1n hat geschrieben:Wenn ich das richtig verstehe wird charly hier sowieso auf None gesetzt? Dann wäre meine Grenzdefinition vorher wertlos?Code: Alles auswählen
def alpha_n(charly:tuple = None) -> int:
