wert zwischenspeichern um funkt. nicht 2mal aufzurufen

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
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

Freitag 23. Januar 2009, 23:55

Hallo zusammen,
ich habe folgendes Proble:

Code: Alles auswählen

def zufallsgenerator():
    Prozess für den Zufall

def zugriff-1():
    greift auf den zufall zu

def zugriff-2():
   greift auch auf den zufall zu
Bei zugriff 2 wird aber die Funktion Zufallsgenerator erneut aufgerufen und produziert somit eine neue Zahl.

Wie kriege ich das hin, daß der Zufall einmal berechnet wird und ich dann von mehreren Funktionen auf immer die gleiche Zahl zugreife, solange, bis ich einen neuen Zufall generieren möcht.

Vielen Dank und viele Grüße
py-mule
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Samstag 24. Januar 2009, 00:15

Du rufst "zufallsgenerator" einmal auf, speicherst das Ergebnis in eine Variable und übergibst es dann als Parameter an die Funktionen.

Vielleicht willst du auch eine Klasse, aber das ist bei dem Code schwer zu sagen.
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

Samstag 24. Januar 2009, 00:35

Danke EyDu, aber sorry, ich bin Anfänger, habe auch ein dickes Buch in dem einiges über Funktionen drin steht, aber leider nichts, was ich übertragen könnte.

Habe ich deinen Vorschlag richtig interpretiert?

Code: Alles auswählen

def zufallsgenerator(variable):
    Prozess für den Zufall
    variable = zufall
    return variable

def zugriff-1():
    greift auf den zufall zu
    und hier??? wie rufe ich hier den Zufalll auf, ohne diesen neu zu     
    generieren?

def zugriff-2():
   greift auch auf den zufall zu
   und hier??? wie rufe ich hier den Zufalll auf, ohne diesen neu zu     
   generieren?
In meinen Versuchen wurde der Zufall neu generiert, was mache ich falsch?

Gruß
py-mule
DasIch
User
Beiträge: 2450
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Samstag 24. Januar 2009, 00:39

Zeig besser mal ein lauffähiges Beispiel.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Samstag 24. Januar 2009, 00:41

Code: Alles auswählen

def zufall():
   return DeineZufallszahl

def zugriff1(x):
    print x

def zugriff2(x):
    print x

x = zufall()
zugriff1(x)
zugriff2(x)
Riskier doch mal einen Blick. Dort gibt es auch einen Abschnitt über Funktionen (Defining Functions).
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

Samstag 24. Januar 2009, 00:57

So habe ich es bisher probiert:

Code: Alles auswählen

import random

# Funktion berechnet eine Zufallszahl
def zufall():
    untergrenze = 1
    obergrenze = 10
    datnr = random.randrange(untergrenze,obergrenze)# Zufallsgenerator
    return datnr

# Funktion ruft Fragen auf
def fragen():
    inhalt_f = open ("C:\\fragen\\f%d.txt" %ZUFALL, "r")

# Funktion ruft Antworten auf
def antworten():
    inhalt_a = open ("C:\\antworten\\a%d.txt" %ZUFALL, "r") 
Aber dabei wird der Zfall jedesmal neu generiert.

Gruß py-mule
BlackJack

Samstag 24. Januar 2009, 01:13

@py-mule: Da wird überhaupt nichts generiert ausser drei Funktionen von denen keine aufgerufen wird.

Ein Aufruf von `zufall()` findet sich nirgends. Und die beiden anderen Funktionen führen zu einem `NameError`, weil `ZUFALL` nicht definiert ist. Desweiteren ist das Öffnen von den Dateien so ziemlich sinnfrei wenn man nichts damit tut.

Mal angenommen die Funktionen enthielten sinnvollen Quelltext, dann müsstest Du vorgehen wie EyDu das beschrieben und sogar an einem Beispiel gezeigt hat.
DasIch
User
Beiträge: 2450
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Samstag 24. Januar 2009, 01:14

Du könntest die zufallszahl übergeben wenn du eine hast und die ansonsten generieren lassen.

Code: Alles auswählen

def fragen(zufallszahl=None):
    zufallszahl = zufallszahl or zufall()
    # mach irgendwas
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

Samstag 24. Januar 2009, 01:29

@ BlackJack:

1. Ich erhalte tatsächlich eine Zufallszahl.

2. Ich hab das mal auf die Schnelle aus mehreren Seiten Quelltext extrahiert, da fehlt natürlich vieles, aber es ist auch nicht wichtig. Das entscheidende ist, daß beim öffnen der Dateien neuer Zufall entsteht, was ich aber nicht gebrauchen kann. Natürlich verarbeite ich den Inhalt der Dateien weiter, was aber noch Probleme bereitet, da ich nicht die zueinandergehörenden Paare aufrufe.

3. Das Beispiel von EyDu (wenn ich das richtig verstanden habe) enthält den Zugriff im Hauptprogramm. Ich möchte aber dei Zufallszahl in weiteren Funktionen verwenden.

Habe ich etwas falsch verstanden?

Viele Grüße
py-mule
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

Samstag 24. Januar 2009, 01:38

jaja, und es muss natürlich:

inhalt_f = open ("C:\\fragen\\f%d.txt" %zufall(), "r")

statt

inhalt_f = open ("C:\\fragen\\f%d.txt" %ZUFALL, "r")

heißen.
BlackJack

Samstag 24. Januar 2009, 09:10

@DasIch: Das läuft schief falls die übergebene Zufallszahl 0 sein sollte, weil die auch "falsch" ist.

@py-mule: Das ist kein *lauffähiges* Beispiel gewesen, was Du gezeigt hast. Der Sinn der Übung besteht darin, dass Du das Problem selber isolierst und dabei eventuell sogar eine Lösung findest, und wir sehen wo *genau* das Problem liegt, weil wir Dein Beispiel nachvollziehen können, indem wir's ausführen.

In Deinem Beispiel ist nicht ersichtlich warum nach laden des Moduls `ZUFALL` an eine zufällige Zahl gebunden sein sollte.

Und irgendwie verstehe ich nicht, warum Du nicht verstehst warum das so nicht geht. Eine Funktion verwendet ständig neue Zufallszahlen, weil sie `zufall()` aufruft, und die andere eine (hoffentlich) Konstante mit dem Namen `ZUFALL`.

Und in dem Beispiel machst Du nicht das was Dir vorgeschlagen wurde: Die Zufallszahl ausserhalb der beiden Funktionen erstellen und dann beiden die gleiche Zahl als Argument beim Aufruf mitgeben. Mach das doch einfach mal.
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

Freitag 30. Januar 2009, 10:26

Hallo zusammen,
kam in der Zwischezeit nicht zum Programmieren, nun habe ich euren Vorschlag umgesetzt, funktioniert gut, war letztendlich ganz einfach.
Vielen Dank und viele Grüße
py-mule
Antworten