Seite 1 von 2

Verfasst: Montag 21. November 2005, 14:55
von Phoenix

Code: Alles auswählen

#!/usr/bin/python

import math 
 
def pythagoras(a, b): 
     try: 
         return math.sqrt(a**2+b**2) 
     except: 
         return False
 
if __name__ == '__main__': 
     a = raw_input('a=') 
     b = raw_input('b=') 
     try: 
         c = pythagoras(int(a), int(b)) 
         print c 
     except ValueError: 
         print 'Der Satz des Pytagoras funktioniert nur mit positiven Zahlen' 
     except TypeError: 
         print 'Der Satz des Pytagoras funktioniert nur mit Zahlen'
Du hast die zeilen nicht richtig eingerueckt, das programm funktioniert so.
Nur wuerde ich math nicht importieren, sondern die Wurzel anders ziehen:

Code: Alles auswählen

def pythagoras(a, b): 
     try: 
         return (a**2+b**2)**0.5
     except: 
         return False
[/code]

Verfasst: Montag 21. November 2005, 15:24
von Python 47
meinst du mich?Ich habe richtig eingerückt.Blackbird hat falsch eingerückt und ha anstatt == nur = geschrieben.Aber das passiert jedem mal.

Also das bringt mich trotzdem nicht weiter.Wie schaffe ich es das die werte die ich durch raw input eingebe an die funktion weiter geletitet werden und diese automatisch ausgeführt wird und mir c ausgibt???

Verfasst: Montag 21. November 2005, 15:30
von joe
Python Master 47 hat geschrieben:meinst du mich?Ich habe richtig eingerückt.
Nein, hast du nicht. if __name__ == '__main__': einzurücken ist von programmablauf doch völlig sinnlos. Ist das nicht erkennbar?
Python Master 47 hat geschrieben:Also das bringt mich trotzdem nicht weiter.Wie schaffe ich es das die werte die ich durch raw input eingebe an die funktion weiter geletitet werden und diese automatisch ausgeführt wird und mir c ausgibt???
Indem du phönix' code ausführst.
joe

Verfasst: Montag 21. November 2005, 15:32
von Leonidas
Etwas Offtopic, sorry:
joe hat geschrieben:joe
Joe, könntest du dich registieren? Ich habe von dir schon viele gute Beiträge gelesen und wir (PythonDe-Krisenstab) überlegen, das Gast-Posten zu deaktivieren :?

Verfasst: Montag 21. November 2005, 15:57
von Phoenix
Python Master 47 hat geschrieben:Wie schaffe ich es das die werte die ich durch raw input eingebe an die funktion weiter geletitet werden und diese automatisch ausgeführt wird und mir c ausgibt???
dieser Teil :

Code: Alles auswählen

         c = pythagoras(int(a), int(b)) 
         print c 
Übergibt die Werte in a und b an die Funktion pythagoras und führt diese aus.
Das Ergebnis wird dann in c gespeichert und mit print ausgegeben.

Verfasst: Montag 21. November 2005, 16:49
von Joghurt
Wie wäre es mit

Code: Alles auswählen

import math

def pythagoras(a, b):
    return math.sqrt(a**2+b**2)

if __name__ == '__main__':
    a = raw_input('a=')
    b = raw_input('b=')
    try:
        print pythagoras(int(a), int(b))
    except ValueError:
        print 'Der Satz des Pytagoras funktioniert nur mit positiven Zahlen'
    except TypeError:
        print 'Der Satz des Pytagoras funktioniert nur mit Zahlen'
Wobei in diesem Falle ValueError niemals auftreten kann, da du ja quadriest.
Wenn du explizit negative Zahlen verbieten willst, schreibe pythagoras um:

Code: Alles auswählen

def pythagoras(a, b):
   if a<=0 or b<=0:
      raise ValueError
   return math.sqrt(a*a+b*b)
(a*a sollte etwas [unmerklich] schneller sein als a**2)

Verfasst: Montag 21. November 2005, 22:35
von Python 47
Danke nochmal für eure Antworten!Ich habe alle Codes mal ausprobiert, die ihr hier rein geschrieben habt, aber keiner macht das was ich will.
Ich möchte, dass wenn ich das script über den Interpreter aufrufe, das dann gefragt wird wie groß a ist (dann tippe ich a ein) und dann gefragt wird wie groß b ist (dann tippe ich b ein).Dann sollen die Werte für a und b der Funktion Pytagoras übergeben werden und dann soll die Funktion ausgeführt werden und c soll ausgegeben werden.Also etwa so:

>>>from Pytagoras import *
>>>a= (dann gebe ich z.b. für a=3 ein)
>>>b= (dann gebe ich z.b. für b=4 ein)
>>>c=5

Kann mir da jemand helfen???

Verfasst: Montag 21. November 2005, 22:43
von Joghurt
Wenn du die Datei importierst, sort der Teil mit __main__ genau dafür, dass der "Testcode" nicht ausgeführt wird. Was du willst, erreichst du, indem du das Skript direkt aufrufst. Also unter Windows die .py Datei doppelklicken, unter Unix

Code: Alles auswählen

python Pythagoras.py
von der Shell aus.

Verfasst: Montag 21. November 2005, 22:46
von Phoenix
Das geht gar nicht.
Woher soll der Wissen, das du die Pythagoras-Funktion aufrufen willst?

Wenn, dann muesstest du das so machen:
(Ich geh mal davon aus, das du die datei als Pytagoras.py abgespeichert hast)

Python 2.4.2 (#2, Sep 30 2005, 21:19:01)
[GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Pythagoras import *
>>> a = 3
>>> b = 4
>>> c = pythagoras(a, b)
>>> print c
5.0
>>>

So habe ich das bei mir ausgeführt, das es funktioniert sollte also klar sein, das was ich vorher gepostet habe, hatte ich auch getestet.

PS: Die Beiträge bisher funktionieren auch, nur nicht so, wie du dir das vorstellst. Ich glaube du musst dich noch etwas mehr mit Python beschäftigen, um die Zusammenhänge zu verstehen.

Verfasst: Montag 21. November 2005, 22:54
von joe
Hi!
Python Master 47 hat geschrieben:Ich möchte, dass wenn ich das script über den Interpreter aufrufe,
Im interpreter? Geht, ist aber seeeeehr eigenwillig. Also, dann darf natürlich nicht das if __name__ == '__main__': gerade nicht drinstehen.
Also:

Code: Alles auswählen

#!/usr/bin/python 

import math 
  
def pythagoras(a, b): 
     try: 
         return math.sqrt(a**2+b**2) 
     except: 
         return False 
  
a = raw_input('a=') 
b = raw_input('b=') 
try: 
    c = pythagoras(int(a), int(b)) 
    print c 
except ValueError: 
    print 'Der Satz des Pytagoras funktioniert nur mit positiven Zahlen' 
except TypeError: 
    print 'Der Satz des Pytagoras funktioniert nur mit Zahlen' 

Code: Alles auswählen

>>> import pythagoras
a=4
b=5
6.40312423743
>>> reload(pythagoras)
a=6
b=7
9.21954445729
joe

Verfasst: Montag 21. November 2005, 23:45
von BlackJack
Python Master 47 hat geschrieben:@blackbird dein code funzt nicht.

Es muss so aussehen:
Woher weisst Du wie sein Quelltext aussehen muss? Entferne einfach mal das try..except aus seiner `pythagoras` Funktion, dann sollte es funktionieren.
Das programm macht auch nichts es gibt keine a= oder b= auf den bildschirm aus und die funktion wird auch nicht automatisch aufgerufen!Das hilft mir auch nicht weiter!
Automatisch wird bei Python nichts aufgerufen. Und wenn man etwas ausgeben will, dann muss man das im einfachsten Fall mit der ``print`` Anweisung machen. Du solltest vielleicht mit etwas einfacherem anfangen.

Die Berechnung direkt mit fest im Programm eingegebenen Werten, dann die Berechnung in eine Funktion verschieben und diese Aufrufen und zum Schluss noch die Benutzereingabe hinzufügen. Dabei jeden Schritt ausführlich testen und verstehen was jede einzelne Zeile bewirkt. Nur so lernst Du etwas dabei.

Verfasst: Dienstag 22. November 2005, 14:19
von antimicro
Lohnt sich das eigentlich, für so kleine Programme, extra das math Modul zu importieren?

Die sqrt() Funktion macht doch bestimmt auch nichts anderes als x^(1/2) ...

quasi:

Code: Alles auswählen

def sqrt(x,n=2):
    if x>0:
        erg = x**(1.0/n)
        return erg

print sqrt(27)
print sqrt(27,3)
? Wenn man dann sicher ist, wie bei dem Beispiel, dass nur die 2te Wurzel benötigt wird, dann reicht doch eigentlich x^(0,5)

// Man muss sich richtig zwingen nicht x**(0,5) sondern x^(0,5) zu schreiben :)

Verfasst: Dienstag 22. November 2005, 14:49
von mawe
antimicro hat geschrieben: Die sqrt() Funktion macht doch bestimmt auch nichts anderes als x^(1/2) ...
Schau mal was ich ganz am Anfang dieses Threads geschrieben hab:
mawe hat geschrieben: Statt math.sqrt(x) kann man auch x**0.5 verwenden
Scheint aber niemanden zu interessieren :)

Verfasst: Dienstag 22. November 2005, 16:28
von antimicro
eigentlich wollte ich darauf hinaus ob intern das gleiche gemacht wird

Verfasst: Dienstag 22. November 2005, 16:35
von Joghurt
Denke nicht. a**b wird als exp(b*ln(a)) implementiert sein. Für math.sqrt wird die Wurzel direkt berechnet.

Verfasst: Dienstag 22. November 2005, 16:48
von Leonidas
Ob es sich lohnt: nicht unbedingt, finde ich aber ein wenig lesbarer. Wegen besserer Lesbarkeit würde ich auch ein paar Prozessorzyklen in Kauf nehmen, denn das math Modul zu importieren dauert auch auf meinem 110 MHz-Router nur Sekundenbruchteile.

Verfasst: Dienstag 22. November 2005, 17:14
von Gast
joe hat geschrieben:Hi!
Python Master 47 hat geschrieben:Ich möchte, dass wenn ich das script über den Interpreter aufrufe,
Im interpreter? Geht, ist aber seeeeehr eigenwillig. Also, dann darf natürlich nicht das if __name__ == '__main__': gerade nicht drinstehen.
Also:

Code: Alles auswählen

#!/usr/bin/python 

import math 
  
def pythagoras(a, b): 
     try: 
         return math.sqrt(a**2+b**2) 
     except: 
         return False 
  
a = raw_input('a=') 
b = raw_input('b=') 
try: 
    c = pythagoras(int(a), int(b)) 
    print c 
except ValueError: 
    print 'Der Satz des Pytagoras funktioniert nur mit positiven Zahlen' 
except TypeError: 
    print 'Der Satz des Pytagoras funktioniert nur mit Zahlen' 

Code: Alles auswählen

>>> import pythagoras
a=4
b=5
6.40312423743
>>> reload(pythagoras)
a=6
b=7
9.21954445729
joe
Danke hat geklappt jetzt werd ich mich mal dran machen alles zu verstehen!