Seite 1 von 1

Interaktive Sitzung in Shell nach Programmcode-Ausführung

Verfasst: Montag 12. November 2018, 14:50
von davidoteles
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

Re: Interaktive Sitzung in Shell nach Programmcode-Ausführung

Verfasst: Montag 12. November 2018, 15:24
von ThomasL
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.

Re: Interaktive Sitzung in Shell nach Programmcode-Ausführung

Verfasst: Montag 12. November 2018, 17:02
von davidoteles
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

Re: Interaktive Sitzung in Shell nach Programmcode-Ausführung

Verfasst: Montag 12. November 2018, 17:06
von davidoteles
Ich habe die Antwort durch ausprobieren gefunden:

Es muss da anfangs stehen: "from 'Dateiname' import *" und dann kann es losgehen!

Re: Interaktive Sitzung in Shell nach Programmcode-Ausführung

Verfasst: Montag 12. November 2018, 17:36
von __blackjack__
@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*.

Re: Interaktive Sitzung in Shell nach Programmcode-Ausführung

Verfasst: Montag 12. November 2018, 17:47
von Sirius3
@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.

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()

Re: Interaktive Sitzung in Shell nach Programmcode-Ausführung

Verfasst: Montag 12. November 2018, 18:43
von davidoteles
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