Hallo liebe Mitglieder,
da ich neu hier bin und auch neu in Python einsteige, möchte ich bevor ich meine Frage stelle gerne einmal Hallo sagen
Nun zur Frage: In pycharme habe ich das folgende kurze Programm eingegeben (habe Pythin 3.7 im Moment):
-----------------------------------------------------------------------------------------------------------------------------------------------
from math import *
class vektor(object):
x = None
y = None
def vorgabe(self, x, y):
self.x = float(x)
self.y = float(x)
def rueckgabe(self):
return self.x, self.y
def eingabe(self):
self.x = float(input("x eingeben:"))
self.y = float(input("y eingeben:"))
def ausgabe(self):
if self.x is None or self.y is None:
print("Es wurde noch kein Vektor definiert!")
else:
betrag = sqrt(self.x**2+self.y**2)
print("x:", self.x)
print("y:", self.y)
print("Der Betrag ist:", betrag)
-----------------------------------------------------------------------------------------------------------------------------------------------
Nun habe ich das Programm ausgeführt und wollte in der Shell beginnen damit etwas anzufangen. Dazu habe ich zunächst "v = vektor()" schreiben wollen und anschließend "v.ausgabe()"
Leider zeigt mir dann aber pycharme folgende Fehlermeldung an.
"v = vektor()
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'vektor' is not defined"
Hier weiß ich leider nicht mehr weiter...
Wisst ihr vielleicht was hier der Fall ist?
Gruß
KingDingeling
Interaktive Sitzung in Shell nach Programmcode-Ausführung
Dein Programm hat einen Dateinamen z.B. vektor.py
Dann gebe mal auf der Shell ein
import vektor
v = vektor.vektor()
Aus Zeitmangel kann ich leider nicht weiter auf deinen Code eingehen, aber da ist vieles nicht optimal.
Dann gebe mal auf der Shell ein
import vektor
v = vektor.vektor()
Aus Zeitmangel kann ich leider nicht weiter auf deinen Code eingehen, aber da ist vieles nicht optimal.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
-
- User
- Beiträge: 4
- Registriert: Montag 12. November 2018, 14:42
Hi und vielen Dank für die schnelle Rückmeldung, sehr freundlich.
Mein Programm heißt "Starting.py" und ich habe eingegeben und erhalten:
import Starting
v = vektor.vektor()
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'vektor' is not defined
Habe ich wiederholt etwas falsch gemacht?
Gruß
Davidoteles
Mein Programm heißt "Starting.py" und ich habe eingegeben und erhalten:
import Starting
v = vektor.vektor()
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'vektor' is not defined
Habe ich wiederholt etwas falsch gemacht?
Gruß
Davidoteles
-
- User
- Beiträge: 4
- Registriert: Montag 12. November 2018, 14:42
Ich habe die Antwort durch ausprobieren gefunden:
Es muss da anfangs stehen: "from 'Dateiname' import *" und dann kann es losgehen!
Es muss da anfangs stehen: "from 'Dateiname' import *" und dann kann es losgehen!
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@davidoteles: Das mit dem Sternchen-Import ist in einer Python-Shell halbwegs okay, obwohl es auch dort nicht ungefährlich ist, aber bitte mach so etwas nicht in Quelltexten von Modulen.
Besser wäre auch in der Shell entweder über den Modulnamen zu gehen oder explizit die Namen zu importieren die Du verwenden möchtest, statt einfach *alles*.
Besser wäre auch in der Shell entweder über den Modulnamen zu gehen oder explizit die Namen zu importieren die Du verwenden möchtest, statt einfach *alles*.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
@davidoteles: Sternchen-Importe vermeiden. Immer die konkreten Namen angeben, weil sonst nicht kontrolliert werden kann, was da alles in den eigenen Namensraum importiert wird. Bei math werden z.B. knapp 50 Namen importiert.
Klassen schreibt man nach Konvention GroßKlein, also Vector.
Man sollte keine Klassenattribute mit Instanzattributen mischen. Attribute werden in __init__ angelegt. Es ist unüblich dafür eine eigene Methode zu verwenden, vor allem weil es dann uninitialisierte Instanzen gibt, wie Du ja selbst in `ausgabe` merkst.
Methoden sollten wie Funktionen nach Tätigkeiten benannt werden, keine Deiner Methoden ist eine Tätigkeit.
Klassen schreibt man nach Konvention GroßKlein, also Vector.
Man sollte keine Klassenattribute mit Instanzattributen mischen. Attribute werden in __init__ angelegt. Es ist unüblich dafür eine eigene Methode zu verwenden, vor allem weil es dann uninitialisierte Instanzen gibt, wie Du ja selbst in `ausgabe` merkst.
Methoden sollten wie Funktionen nach Tätigkeiten benannt werden, keine Deiner Methoden ist eine Tätigkeit.
Code: Alles auswählen
class Vektor(object):
def __init__(self, x, y):
self.x = float(x)
self.y = float(x)
@classmethod
def generate_from_input(cls):
x = input("x eingeben:")
y = input("y eingeben:")
return cls(x, y)
def get_coordinates(self):
return self.x, self.y
def get_length(self):
return (self.x**2 + self.y**2) ** 0.5
def output(self):
print("x:", self.x)
print("y:", self.y)
print("Der Betrag ist:", self.get_length())
v = Vector.generate_from_input()
v.output()
-
- User
- Beiträge: 4
- Registriert: Montag 12. November 2018, 14:42
Recht herzlichen Dank für eure Antworten und Hinweise! Sehr freundlich von euch.
Ich wünsche noch einen schönen Start in die Woche!
Gruß KingDingeling
Ich wünsche noch einen schönen Start in die Woche!
Gruß KingDingeling