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

Sonntag 9. November 2008, 19:17

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: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sonntag 9. November 2008, 19:21

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

Sonntag 9. November 2008, 19:22

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:

Sonntag 9. November 2008, 19:27

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: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sonntag 9. November 2008, 19:35

@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:

Sonntag 9. November 2008, 20:26

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: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sonntag 9. November 2008, 20:28

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

Sonntag 9. November 2008, 21:01

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: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sonntag 9. November 2008, 21:31

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 9. November 2008, 23:34

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 Modvoice
BlackJack

Montag 10. November 2008, 00:08

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

Montag 10. November 2008, 09:53

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

Montag 10. November 2008, 10:35

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

Montag 10. November 2008, 11:05

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

Montag 10. November 2008, 11:17

__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 ...
Antworten