Funktion startet nicht

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
bastmast
User
Beiträge: 3
Registriert: Sonntag 28. Oktober 2012, 17:13

Hallo,
Wollte grad meine ersten Versuche mit Python machen, und irgendwie klappt da garnichts.
Die Funktion soll, solange "d" hochzählen, bis "t" einen Wert annimmt, welcher ein Integer ist, und mir den Wert von "d" dann ausgeben. Beim starten gibts auch keine Probleme, aber wirklich machen tut es wohl auch nix. Was mach ich da denn so komplett falsch?

Code: Alles auswählen

def solveD ():
    a=1209050205001101
    b=1908011809140100
    u=4433106691287813999672937
    v=101217640105485652757
    d=3
    while True:
        t=((v*a)-(b*u))/(a*a-b*b*d)

        if (t-int(t)==0):
            print(d)
            break
        d=d+1

    
Danke schonmal :)

//Edit: i=i+1 war noch übrig vom testen, ist jetzt entfernt

//Und schon tut es, muss man die Pythonshell wirklich vor jeder Änderung am Dokument neustarten? Ich hätte vermutet, dass ein erneuter import reichen sollte?!
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

bastmast hat geschrieben:Und schon tut es, muss man die Pythonshell wirklich vor jeder Änderung am Dokument neustarten? Ich hätte vermutet, dass ein erneuter import reichen sollte?!
Nein. Mit der built-in function 'reload' kannst Du Module neu einlesen.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@bastmast: Rufst Du die Funktion auch irgendwo auf? Denn von alleine startet die tatsächlich nicht. Das wäre auch ziemlich blöd wenn Funktionen einfach so ausgeführt würden, nur weil sie existieren.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Das wäre auch ziemlich blöd wenn Funktionen einfach so ausgeführt würden, nur weil sie existieren.
Ich verstehe schon deinen Punkt, aber in C gibt es ja tatsächlich ``int main()`` die genau so ausgeführt wird. Und wenn es nur eine Funktion gibt könnte man auch annehmen dass die dann ausgeführt wird. Also ganz aus der Luft gegriffen ist das Szenario ja nicht, auch wenn Python sowas nicht implementiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
bastmast
User
Beiträge: 3
Registriert: Sonntag 28. Oktober 2012, 17:13

Vielen dank für eure Antworten, ich habe die Funktion schon aufgerufen (from xx.py import *), und dann eben ausgeführt.

Das Problem lag wohl tatsächlich darin, dass ein erneutes importieren nicht zur "Erneuerung" der Funktion führt, und dann immer wieder irgendwas ausgeführt wurde, was ich so nicht verstanden hab.

Der Tipp Python nicht jedesmal neustarten zu müssen hat mir natürlich gefallen, und ich wollte ich direkt ausprobieren, aber wie gibt man ihn ein? ich habe es mit "reload(xx.py)" und mit "reload(Funktionsname) versucht, allerdings klappt das beides nicht. Wie genau muss man das denn eingeben? :)
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

mutetella hat geschrieben:
bastmast hat geschrieben:Und schon tut es, muss man die Pythonshell wirklich vor jeder Änderung am Dokument neustarten? Ich hätte vermutet, dass ein erneuter import reichen sollte?!
Nein. Mit der built-in function 'reload' kannst Du Module neu einlesen.

mutetella
Es sei gesagt, dass es nur in Python 2 eine eingebaute Funktion ist. In Python 3 findet man diese Funktion im "imp"-Modul.

Und sein Code sieht einigermaßen nach Python 3 aus (Klammern ums print). Allerdings hat er auch Klammern um die if-Bedingung gesetzt, also könnte es auch nur ein Stil-Fehler sein. ;-)

Zu benutzen ist das folgendermaßen:

Code: Alles auswählen

>>> import imp
>>> import blabla
>>> blabla.blub()
"dieses Ergebnis ist nicht das gewünschte"
# (... Datei wird in der Zwischenzeit verändert ...)
>>> imp.reload(blabla)
>>> blabla.blub()
"dieses Ergebnis ist korrekt!"
Man muss der Funktion also das Modul übergeben.
bastmast
User
Beiträge: 3
Registriert: Sonntag 28. Oktober 2012, 17:13

Ja benutzte Python 3, ist dann wohl eher ein Stilfehler, komme halt von Java, wo man um alles klammern setzten muss :wink:

Danke, so wie du es geschrieben hast, funktioniert es jetzt auch bei mir :)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@bastmast:
Mit 'reload(module)' lädst Du ein Modul neu... Eine daraus importierte Funktion/Klasse landet im lokalen Namensraum und ist nicht an das Modul, aus der die Funktion/Klasse stammt, gebunden. Eine Möglichkeit wäre folgendes:

Code: Alles auswählen

>>> import sys
>>> from any_module import *
>>> del sys.modules['any_module']
>>> from any_module import *
Aber ob das sauber ist müssen andere entscheiden... ;-)

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten