Fehlermeldung: 'module' object has no attribute 'pi'

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
NC10
User
Beiträge: 3
Registriert: Freitag 8. Mai 2009, 11:19
Wohnort: München
Kontaktdaten:

Freitag 8. Mai 2009, 11:29

Hallo,

bin zur Zeit dabei mich in Python einzuarbeiten. Ich habe immer wieder Probleme beim Importieren von Modulen. (im interaktiven Modus dageben klappts IMMER!)
1. Ich hatte zur Übung ein kleines Zahlenspiel programmiert wo die Aufgaben mit Hilfe eines Art Zufallsgenerator zufällig gewählt werden, Dazu habe ich das Modul random verwendet. Dabei hatte ich immer wieder das Problem dass beim Ausführen meiner py-Datei immer wieder die Fehlermeldung kam 'module' objekt has no attribute 'random'. Mittlerweile funktionierts aber! Warum? WEIS ICH NICHT!?

2. So nunwollte ich mit Hilfe des moduls math sin, cos und tan berechnen:
Sieht folgendermaßen aus:
#Modul math
import math
x=30
xbm=x/180.0 * math.pi
print('Sinus von 30°:',math.sin(xbm))
print('Consinus von 30°:',math.cos(xbm))
print('Tangens von 30°:',math.tan(xbm))
Beim Ausführen erhalte ich immer wieder eine Fehlermeldung: 'module' objekt hast no attribue pi! Im interaktiven Modus funktionierts aber!
Beachte print(): Ich arbeite mit python3.0!

Ich hab keine Ahnung warum. Bin auch noch Anfänger!
Wer kann mir da weiterhelfen? Vielen vielen Dank im Vorraus!

NC10
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Freitag 8. Mai 2009, 11:42

Kann es sein das du dein eigenes Skript math.py genannt hast?
In dem Fall import dein Skript sich selber und hat natürlich nicht das Attribut pi.
NC10
User
Beiträge: 3
Registriert: Freitag 8. Mai 2009, 11:19
Wohnort: München
Kontaktdaten:

Freitag 8. Mai 2009, 11:49

HI,
DANKE. ja ich hatte mein skript math.py genannt. Da hätt ich auch selbst draufkommen.

Andere Frage: (möcht jetzt nicht noch einen neuen Thread aufmachen)
Gibt es eine Python - Entwicklungsumgebung für Linux(Ubuntu), bei der ich auswählen kann mit welcher Pythonversion ich arbeiten möchte.
Habe auf meinem Laptop natürlich beide Versionen installiert. 2.5 2.6 und 3.0. Die alten halt für Gnome usw. Erlene aber gerade 3.0. Allerdings nutzen meine Entwicklungsumgebungen Dr.Python Eric oder IDLE immer standartgemäß mit den alten Versionen. Wer kann mir da weiterhelfen?

Vielen Dank

nc10
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Freitag 8. Mai 2009, 12:00

Ich kanns grad nicht nachprüfen, aber ich bin mir sehr sicher, dass man den für das Skript benutzten Interpreter bei Eric einstellen kann.

Edit: Entweder ist das rausgeflogen oder ich hab mich geirrt. Du kannst aber manuell über das Terminal in eric das Skript mit einem anderen als dem Systeminterpreter starten `python3.0 skript.py`

Zum Lernen: Wenn du mit Python gleich etwas "richtiges" machen willst, solltest du mit Python 2.6 anfangen, da die meisten Bibliotheken noch nicht auf Python 3 portiert sind.
Zwischen 2 und 3 solltest du in der Lernphase aber absolut nicht wechseln, da die sich doch signifikant anders verhalten. Deswegen auch die Frage: Benutzt du Python2.x für den Schnipsel oben? Wenn ja, solltest du die Klammern bei `print` weglassen, da du sonst unangenehme Überraschungen begegnest.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Freitag 8. Mai 2009, 12:40

NC10 hat geschrieben: Allerdings nutzen meine Entwicklungsumgebungen Dr.Python Eric oder IDLE immer standartgemäß mit den alten Versionen. Wer kann mir da weiterhelfen?
Die meisten nutzen eben das systemweite "Standardpython" - ist ja auch sinnvoll. Wenn Du ein Anderes setzen willst, kannst Du in der Regel unter /usr/bin einen Link auf die gewünschte Pythonversion setzten. Das funktioniert allerdings nicht immer mit Python3.0, da z. T. dort die Syntax eine andere ist.*

Im Übrigen:

Code: Alles auswählen

import math

math.radians(180) # gibt 3.1415926535897931
math.degrees(math.pi) # 180.0
So muß man die Konversion nicht selber definieren.

Gruß,
Christian

*edit: Bevor ich geschlagen werde: Den Link kann man natürlich jederzeit setzen. Aber nicht immer wird die IDE des Vertrauens python3.0 schlucken ohne sich zu beschweren. ;-)
Zuletzt geändert von CM am Freitag 8. Mai 2009, 12:46, insgesamt 1-mal geändert.
NC10
User
Beiträge: 3
Registriert: Freitag 8. Mai 2009, 11:19
Wohnort: München
Kontaktdaten:

Freitag 8. Mai 2009, 12:44

HI,
danke für die schnelle Antwort: Die Möglichkeit mit python3.0 skript.py ist mir bekannt und mach ich momentan auch so. Es ging mir eben um eine Entwicklungsumgebung, damit ich nicht immer das Temrinal aufrufen muss .... Ich muss nochmal genau nachsehen, ob man den Interpreter wirklich nirgends einstellen kann.

Zum Lernen: Ja ich mach an der Uni so ein Pythonseminar. Dort arbeiten wir eben schon mit 3.0! Die Unterschiede sind mir bekannt, sie können durchaus zu Verwirrung führen...

Andere Frage (mal wieder :D )
Ich habe gerade die Funktion Fraction() und die Methode gcd() des Moduls fractions. Was ist denn nun der Unterschied zwischen einer Funktion und einer Methode?

Vielen Dank
nc10
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Freitag 8. Mai 2009, 13:06

Hallo,

Fraction ist eine Klasse und gcd ist eine Funktion des Moduls fractions.

Methoden gehören zu einer Klasse, mit Methoden kannst du auf die Eigenschaften einer Klasse zugreifen.

Funktionen können auf Modulebenen, in Klassen oder in Funktionen definiert werden. Die Funktion gcd liefert dir z.B. den größten gemeinsamen Teiler zurück.


Grüße Martin
Benutzeravatar
kbr
User
Beiträge: 957
Registriert: Mittwoch 15. Oktober 2008, 09:27

Freitag 8. Mai 2009, 13:18

NC10 hat geschrieben:Was ist denn nun der Unterschied zwischen einer Funktion und einer Methode?
Vereinfacht gesagt sind Methoden die Funktionen einer Klasse. Mittels des zusätzlichen Parameters "self" ist der Zugriff auf Klassen- und Instanz-Attribute sowie andere Methoden der Klasse möglich.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Freitag 8. Mai 2009, 14:13

In Python ist das (im Gegensatz zu anderen Sprachen) nicht strikt getrennt, d.h. man kann aus Methoden Funktionen machen und umgekehrt.
Benutzeravatar
Goswin
User
Beiträge: 361
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen

Freitag 8. Mai 2009, 15:35

cofi hat geschrieben:Wenn du mit Python gleich etwas "richtiges" machen willst, solltest du mit Python 2.6 anfangen, da die meisten Bibliotheken noch nicht auf Python 3 portiert sind.
Es gibt ja mittlerweile schon Python_3.01 wo laut Python-interner Angaben "Dutzende von Bugs ausgebessert wurden". Weiß jemand wie das jetzt mit Python 2.6 ist, wurden da diese Bugs auch ausgebessert?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Freitag 8. Mai 2009, 16:02

Goswin hat geschrieben:
cofi hat geschrieben:Wenn du mit Python gleich etwas "richtiges" machen willst, solltest du mit Python 2.6 anfangen, da die meisten Bibliotheken noch nicht auf Python 3 portiert sind.
Es gibt ja mittlerweile schon Python_3.01 wo laut Python-interner Angaben "Dutzende von Bugs ausgebessert wurden". Weiß jemand wie das jetzt mit Python 2.6 ist, wurden da diese Bugs auch ausgebessert?
DIESE nicht, aber ANDERE ... :)
Antworten