Seite 1 von 1

return value None

Verfasst: Dienstag 19. Februar 2008, 21:22
von roelandt
Hallo

Ich habe ein Problem das der return Wert manchmal None zurück gibt und manchmal den richtigen Wert. Was mach ich falsch?

gruss
Roel


1.file:

Code: Alles auswählen

import zufallsZahl
import rechnenCore

    
s1 = []
s1 = zufallsZahl.zufallsZahl()
print s1
2.file:

Code: Alles auswählen

import random
import division

a1 = ''
a2 = ''
s1 = []
def zufallsZahl():
    a1 = random.randint(1,10)
    a2 = random.randint(1,10)
    print a1, a2
    s1 = [a1, a2]
   
    if a1 % a2 == 0:
        print 'Wert von a1 und a2: ', a1,a2
        s1 = [a1, a2]
        print 'Wert von s1: ', s1
        return s1[:]
            
    else:
        print 'Ich bin im else'
        zufallsZahl()
3.file:

Code: Alles auswählen

def divisionTest(ersteZahl, zweiteZahl):
    return ersteZahl % zweiteZahl
def division(ersteZahl, zweiteZahl):
    return ersteZahl / zweiteZahl

Verfasst: Dienstag 19. Februar 2008, 21:32
von EyDu
Willkommen im Forum. Bitte packe deinen Code doch bitte noch in Code-Tags, so kann man den Quellcode kaum lesen und muss auf Grund der fehlenden Einrückung die Semantik approximieren ;-)

Ich vermute einfach mal, dass du im else-Teil

Code: Alles auswählen

return zufallsZahl()
meinst.

Schau dir doch bitte noch mal PEP8 an. Python ist kein Java ;-)

Und wozu ist eigentlich die Unterteilung in zwei Module gedacht ?!

Verfasst: Dienstag 19. Februar 2008, 21:39
von roelandt
sorry, hab nicht gesehen das beim copy paste die formatierung weg war. Ich will das die zweite zufallszahl durch die erste zufallszahl teilbar ist ohne rest oder dezimalstellen. die else schlaufe soll die zufallszahlen neu generiren wenn die if bedingung nicht erfüllt ist. dies funktioniert auch , aber der wert in s1 ist oft None

Verfasst: Dienstag 19. Februar 2008, 21:53
von BlackJack
Und da hat EyDu schon gesagt, dass es daran liegt, dass Du im ``else``-Teil nichts zurück gibst!

Das sollte man aber sowieso nicht als Rekursion ausdrücken, sondern in einer Schleife.

Es sind zu viele Dateien. Den Inhalt der dritten Datei benutzt Du noch nicht einmal und so einfachen Operationen in Funktionen zu stecken ist nur interessant, wenn man die Funktion irgendwo als Argument übergeben möchte. Allerdings gibt's die schon im `operator`-Modul.

In der ersten Datei ist die Zuweisung in Zeile 5 überflüssig und in der zweiten Datei alle ausserhalb der Funktion. Was soll das!?

`s1` in `zufallsZahl()` ist überflüssig und man würde dort eher ein Tupel zurück geben. Das Kopieren vorm zurück geben ist auch überflüssig, weil das "Original" nach dem ``return`` ja garantiert nirgendwo anders verwendet wird.