Python-Code wird nicht ausgeführt

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
invisible
User
Beiträge: 6
Registriert: Freitag 13. März 2020, 02:40

Seid gegrüßt,

wage mich wieder an Python ran und dieses mal mit der IDE "PyCharm". Habe früher ein bischen mit Python gearbeitet, waren aber immer kleine Skripte die ich geschrieben habe und eher im Terminal. Würde mich dennoch als Anfänger betrachten, nur so damit ihr vorbereitet seid. Aufjedenfall möchte ich mit Python objektorientiert programmieren. Ich werde in der nächsten Zeit höchstwahrscheinlich die eine oder andere Frage hier stellen. Würde sagen ich poste erstmal dann einfach mein Anliegen. Also, ich hab jetzt ein kleines OOP Testskript in Python geschrieben, welches ich testen (ausführen) wollte. Nun erhalte ich von PyCharm folgende Fehlermeldung (siehe Screenshot). Wäre dankbar für Rückmeldung.

Code: Alles auswählen

C:\Users\Lenovo\PycharmProjects\Erster_Versuch\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm 2019.3.3\plugins\python\helpers\pydev\pydevconsole.py" --mode=client --port=55961

import sys; print('Python %s on %s' % (sys.version, sys.platform))
sys.path.extend(['C:\\Users\\Lenovo\\PycharmProjects\\Erster_Versuch', 'C:/Users/Lenovo/PycharmProjects/Erster_Versuch'])

PyDev console: starting.
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
runfile('C:/Users/Lenovo/PycharmProjects/Erster_Versuch/testfile1.py', wdir='C:/Users/Lenovo/PycharmProjects/Erster_Versuch')

Der Python Code sieht wie folgt aus:

Code: Alles auswählen

class Rechteck:
    def __init__(self,laenge,breite):

        self.myLaenge = laenge
        self.myBreite = breite

        print('rechteck erstellt')

        def printRechteck(self):
            print('Rechtecklänge:'+str(self.myLaenge)+'Rechteckbreite'+str(self.myBreite))

            rechteck1 = Rechteck(20,5)

            rechteck1.printRechteck()
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Da ist keine Fehlermeldung.
Das sind die Ausgaben, mit denen dir PyCharm zeigt, dass das Script gestartet wird.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Die Einrückung bei dir war fehlerhaft.

Anmerkungen:

Variablen werden in Python klein_mit_unterstrich geschreiben. Außnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Strings setzt man nicht mit '+' zusammen, sondern benutzt Stringformatierung. Das "my" Prefix ist bei Variablennamen unnötig.

Code: Alles auswählen

class Rechteck:
    def __init__(self, laenge, breite):
        self.laenge= laenge
        self.breite = breite

        print('rechteck erstellt')

    def print_rechteck(self):
        print(f"Rechtecklänge: {self.laenge} Rechteckbreite: {self.breite}")

rechteck1 = Rechteck(20,5)

rechteck1.print_rechteck()
Sirius3
User
Beiträge: 18258
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn das der gesamte Code ist, machst du ja auch nichts. Die my-Präfixe löschst Du am besten gleich wieder. Die Einrückung von printRechteck ist falsch. Und danach noch fälscher für die zwei letzten Zeilen. Strings setzt man nicht mit + zusammen, sondern benutzt Stringformatierung.
Benutzeravatar
__blackjack__
User
Beiträge: 14016
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@invisible: Die 1 bei `rechteck1` kann dann auch gleich wieder weg weil man keine Namen durchnummeriert.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
invisible
User
Beiträge: 6
Registriert: Freitag 13. März 2020, 02:40

Vielen Dank euch für die konstruktiven Rückmeldungen!

Also ich bin jetzt mal nach euren Methoden vorgegangen und es funktioniert. Was das rechteck1 angeht, so war es halt gedacht dass ich mit der Zeit mehrere Objekte der Klasse Rechteck erstelle, also rechteck1, rechteck2 usw. Das f vor den ersten Anführungsstrichen in der printMethode, ist so wie ich das jetzt verstanden habe, notwendig, da es ohne nicht funktioniert und steht wahrscheinlich für "format". Naja aufjedenfall funktioniert es und da es dazu dienen soll den Programmierstil einheitlich zu halten, bemühe ich mich, die von euch erhaltenen Ratschläge (was die Einrückung und Formatierung angeht) umzusetzen. Vielen Dank an dieser Stelle nochmal! :D
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Ja, dass die Nummerierung der Rechtecke dafür gedacht war, hat __blackjack__ sich schon gedacht. Deshalb hat er auch gesagt, dass das nicht richtig ist.
Wenn man die Situation hat, dass man Variablen nummerieren möchte, dann möchte man eigentlich eine Liste verwenden.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Wenn du mehrere Rechtecke erstellen willst, dann speicher die in lieber in einer Liste am anstatt zu durchnummerieren.
invisible
User
Beiträge: 6
Registriert: Freitag 13. März 2020, 02:40

achso ja stimmt ne Array List erstellen, alles klar denke langsam aber sicher werden die alten Prog-Kenntnisse wieder kommen.
Antworten