def und return wirft nichts aus

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.
muskel
User
Beiträge: 6
Registriert: Sonntag 9. November 2008, 19:12

Hallo liebe Leute,
ich taste mich erst seit kurzem an die def-funktion an und musste leider feststellen, dass ich, sobald ich mit der def-funktion etwas schreibe, niemalsnie zu einem Ergebnis komme. Also keine Endlosschleife, nein, es wird einfach nichts ausgeworfen *schnüff*
Ich schiebe schon fast du Schuld auf mein Python! ;)

Code: Alles auswählen

a=585
b=75
def ggt(a,b):
   while b > 0:
      rest = a % b
      a = b
      b = rest
   return a
wo klemmt der Schuh? :)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Du musst die Funktion aufrufen:

Code: Alles auswählen

ggt(a, b)
Wie hast du dir den vorgestellt wie Funktionen sonst arbeiten?
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

und wieder jemand mit ggt

willkommen im forum suchfiunktion und die lösung liegt vor dir
ansonsten

Code: Alles auswählen

print "Dieses Programm rechnet Ihnen den groessten gemeinsamen Teiler zweier Zahlen aus."
print
zahl1 = input("Bitte geben Sie die 1. Zahl ein ")
zahl2 = input("Bitte geben Sie die 2. Zahl ein ")


def Euclid (a,b):
    if (b == 0) :
        return a
    else :
        return Euclid (b, (a % b))

print Euclid(zahl1,zahl2)
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Hallo

Code: Alles auswählen

a=585
b=75

def ggt(a,b):
   while b > 0:
      rest = a % b
      a = b
      b = rest
   return a

ausgabe = ggt(a,b)
print ausgabe
So gehts.
Ich decke mal du hast die Funktion schon aufgerufen und es nur vergessen hier einzufügen.

Mit "return a" wird die Varibale a zurückgegeben.
Das kanst du entweder so abfangen wie ich das gemacht habe oder so:

Code: Alles auswählen

a=585
b=75

def ggt(a,b):
   while b > 0:
      rest = a % b
      a = b
      b = rest
   return a

print ggt(a,b)
Ich bin zu langsam beim Schreiben!!!

Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@sea-live
Denkst du wirklich es ist sinnvoll gleich zu zeigen wie man es Falsch macht? input sollte nicht verwendet werden, es sei den man verwendet Py3k.
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

ist doch egal in dem Beispiel. Wer da "import shutil;shutil.rmtree('/')" eingibt, wenn er nach ner Zahl gefragt wird, hat schon selbst Schuld
Ne invoces expellere non possis
[url=xmpp://florian@florianheinle.de]xmpp:florian@florianheinle.de[/url]
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

In dem Beispiel ist es eigentlich egal aber besser man gewöhnt sich dass gar nicht erst an.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

tiax hat geschrieben:ist doch egal in dem Beispiel. Wer da "import shutil;shutil.rmtree('/')" eingibt, wenn er nach ner Zahl gefragt wird, hat schon selbst Schuld
Wer das eingibt, bekommt eine Fehlermeldung und es passiert gar nichts, weil eval() nur Ausdrücke und keine Anweisungen auswertet.

Ist mal wieder typisch und nicht das erste Mal, wo vor dem bösen, bösen input() gewarnt wird und man ein Beispiel angibt, das die Bösartigkeit gar nicht zeigt, weil es nicht funktioniert. Und damit zeigt man eigentlich das Gegenteil, dass es so einfach* gar nicht ist, mittels input() Schaden anzurichten.

Sicher: Man MUSS input() nicht benutzen, aber so lange man Code schreibt, der für einen selbst gedacht ist, ist es wahrhaftig ungefährlich und gerade für Programmieranfänger, die gaaaanz am Anfang stehen (und da beginnt man z.B. im schulischen Bereich oft mit Zahlen und es dauert eine Weile, bis man zu Zeichenketten und Typumwandlungen übergeht), ist die Verwendung von input() einfach naheliegend und auch ungefährlich.

* Natürlich ist es insofern "einfach", als man es natürlich mit einer Zeile Code schaffen kann, wenn man weiß wie es geht (und ich weiß wie es geht), aber man dazu Elemente von Python einsetzen muss, die man in der Regel sonst höchst selten benötigt.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

numerix hat geschrieben:Ist mal wieder typisch und nicht das erste Mal, wo vor dem bösen, bösen input() gewarnt wird und man ein Beispiel angibt, das die Bösartigkeit gar nicht zeigt, weil es nicht funktioniert.

Code: Alles auswählen

__import__('shutil').rmtree('/')
Die größere Dummheit dürfte eher darin liegen den Interpreter unbedacht als root auszuführen.

Trotzdem wurde input in 3.0 nicht umsonst entfernt(bzw. durch raw_input ersetzt)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

numerix hat geschrieben:Ist mal wieder typisch und nicht das erste Mal, wo vor dem bösen, bösen input() gewarnt wird und man ein Beispiel angibt, das die Bösartigkeit gar nicht zeigt, weil es nicht funktioniert. Und damit zeigt man eigentlich das Gegenteil, dass es so einfach* gar nicht ist, mittels input() Schaden anzurichten.
Ja. Wir sollten unbedingt Leute ``input()`` weiter nutzen lassen und uns dann freuen wenn die größeren Programme der Leute wegen Sicherheitslücken explodieren. Wir sollten auch nicht mehr vor SQL-Injections warnen, denn wer sich nicht selbst informiert ist ja auch selbst schuld. Wir sollten auch nicht vor globals warnen, denn wer nach 2000 Zeilen Spaghetticode feststellt dass das eine Schrottidee war, der hats auch verdient.

Numerix, wenn du damit ein so großes Problem hast, dann leg doch einfach eine Wiki-Seite an, so wie "Parametrisierte SQL-Queries", die soweit ich mich erinnere von jens angelegt wurde um qualifiziert zu zeigen warum das eine schlechte Idee ist. Lege so eine Seite an wo das klar dargelegt wird und ich werde darauf linken, denn ich bin es ebenso Leid, das so oft zu wiederholen (und auch die Diskussion jedes mal aufs neue zu wiederholen).

Ich persönlich finde es absolut unpromlematisch auch in kleinen Beispielen die vier Buchstaben von ``raw_`` zu schreiben, wenn man auf solcherlei triviale Weise die Korrektheit(!) des Programmes erfüllt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Das Sicherheitsproblem ist auch nicht das einzige Argument. Es kommen einfach komische Fehler wenn man etwas falsches eingibt. Man muss ja im Grunde alles behandeln, was durch einen beliebigen Ausdruck ausgelöst werden kann. Vom `SyntaxError`, über `NameError` bis zum `ZeroDivisionError`.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Leonidas hat geschrieben:Numerix, wenn du damit ein so großes Problem hast, dann leg doch einfach eine Wiki-Seite an
Nein. das lohnt sich nicht mehr - Python 3000 ist ja im Anmarsch, dann hat sich das Thema erledigt.
Leonidas hat geschrieben:Ich persönlich finde es absolut unpromlematisch auch in kleinen Beispielen die vier Buchstaben von ``raw_`` zu schreiben, wenn man auf solcherlei triviale Weise die Korrektheit(!) des Programmes erfüllt.
Und ich finde es ebenso unproblematisch, einen Anfänger input() benutzen zu lassen und ihn zu gegebener Zeit auf die Problematik hinzuweisen.

Was mich nervt sind ja nicht die Beiträge, die gut begründet darlegen, warum man dies oder das so oder so machen sollte, sondern die, wo jemand, der nicht genug davon versteht, um wenigstens ein funktionierendes Beispiel dazu angeben zu können, vor der Gefährlichkeit warnt. Das finde ich schlicht peinlich.
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

muskel hat geschrieben:wo klemmt der Schuh? :)
Toll gemacht. Alle streiten sich deinetwegen!
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Dabei hat er nur eine Frage gestellt.

Also muskel, die Funktion, die du definiert hast, will auch aufgerufen werden.

Code: Alles auswählen

a = 585
b = 75
def ggt(a,b):
    while b > 0:
        rest = a % b
        a = b
        b = rest
    return a
    
ggt(a,b)
>> 15
Lass dich nicht verunsichern und probier weiter. Wird schon werden.
Gruß!
lunar

__marcus__ hat geschrieben:
muskel hat geschrieben:wo klemmt der Schuh? :)
Toll gemacht. Alle streiten sich deinetwegen!
Was soll das? Der OP ist wohl der einzige, der dafür nichts kann ...
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Und außerdem streiten wir ja nicht ... :wink:

Es gibt eben so ein paar Reizvokabeln, die in schöner Regelmäßigkeit zu einer solchen Diskussion führen: input() z.B. oder der (gezielte) Sternchenimport. Aber dafür ist so ein Forum ja (auch) da.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Heißt das du führst deine Kritik nur an, um andere Leute auf die Palme zu bringen? Ganz großes Tennis...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

numerix hat geschrieben:Nein. das lohnt sich nicht mehr - Python 3000 ist ja im Anmarsch, dann hat sich das Thema erledigt.
So schnell wird das eher nicht gehen.
numerix hat geschrieben:Und ich finde es ebenso unproblematisch, einen Anfänger input() benutzen zu lassen und ihn zu gegebener Zeit auf die Problematik hinzuweisen.
Wann ist gegebene Zeit? Wenn er ein mehrere Tausend Zeilen langes Programm fertig und deployt hat und dann ein kleines Problem hat und sich rausstellt dass sein Programm hunderte ``inputs()`` hat? Ich nehme jetzt nicht an, dass du bei jedem Anfänger immer dabeistehst und guckst was sie machen. Daher bin ich dafür Anfängern *so früh wie möglich* guten Stil beizubringen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

snafu hat geschrieben:Heißt das du führst deine Kritik nur an, um andere Leute auf die Palme zu bringen? Ganz großes Tennis...
Das hat er nicht gesagt. Er hat nur bemerkt, dass es ihm um sachliche Diskussion und nicht ums Flamen geht. Dein Vorwurf ist imho unbegründet und hat vor allem auch rein gar nichts mit dem Thema dieser Diskussion zu tun. Genau wegen sowas fangen Flamewars doch erst an ...
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

:oops: ICH WARS ICH WARS :oops:

binn wie immer an allem schuld BASIC forever! :roll:

scheint immer der gleiche lehrer zusein der das ggt in Python haben möchte
Antworten