invalid syntax

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
Newbe
User
Beiträge: 2
Registriert: Freitag 2. August 2019, 01:22

Hallo zusammen,
ich beschäftige mich erst seit sehr kurzer Zeit mit Python und bin daher leider noch etwas unbeholfen. Wahrscheinlich handelt es sich bei meinem Problem auch um einen sehr offensichtlichen Fehler allerdings kann ich ihn nicht finden.
Über eine Hilfe würde ich mich sehr freuen.

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

class Box:
    
    def _init_(self,init_status=[1,1,1,1],grenzen=[-2,2,-2,2],size=0.02):
        self.init_status = np.array(init_status, dtype=float)
        self.status = self.init_status.copy()
        self.time_verstrichen = 0
        self.grenzen = grenzen
        self.size = size
        
    def step(self,dt):
        self.time_verstrichen = self.time_verstrichen + dt
        
        self.status[0:1:1] = self.status[0:1:1] + dt * self.status[2:3:1]
        
        grenze_x1 = (self.state[0] < self.grenzen[0] + self.size)
        grenze_x2 = (self.state[0] > self.grenzen[1] - self.size)
        grenze_y1 = (self.state[1] < self.grenzen[2] + self.size)
        grenze_y2 = (self.state[1] > self.grenzen[3] - self.size)
        
        if(grenze_x1==True):
            self.status[0] = (self.grenzen[0] + self.size)
            self.status[2] = (self.status[2] * (-1))
        elif(grenze_x2==True):
            self.status[0] = (self.grenzen[1] - self.size)
            self.status[2] = (self.status[2] * (-1))
        else:
            self.status[0] = (self.status[0]
        
        if(grenze_y1==True):
            self.status[1] = (self.grenzen[2] + slef.size)
            self.status[3] = (self.status[3] * (-1))
        elif(grenze_y2==True):
            self.status[1] = (self.grenzen[3] - self.size)
            self.status[3] = (self.status[3] * (-1))
        else:
            self.status[1] = self.status[1]
            self.status[3] = self.status[3]]
Ich bekomme folgende Fehlermeldung:

Code: Alles auswählen

 if(grenze_y1==True):
                                               ^
SyntaxError: invalid syntax
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

If ist keine Funktion. Danach müssen keine Klammern stehen.

Den Vergleich auf True kannst du dir sparen. Am schönsten wäre so eine Bedingung:

Code: Alles auswählen

if grenze_y1:
Das Problem liegt bei einem Syntax Error aber oft in der Zeile davor, weil der Interpreter in der nachfolgenden Zeile merkt, dass die erste gar nicht syntaktisch korrekt ist. In diesem Fall würde ich mir dort mal die Klammern anschauen.
Wobei die Klammern dort auch unsinnig sind. Du musst damit deutlich sparsamer umgehen. Mit Klammern werden in Python Tupel definiert. Wenn du unnötig Klammern spammst, wo sie nicht hin gehören, ist das fehleranfällig und dort, wo sie wichtig sind, gehen sie unter.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sparrow: Es gibt nur einen einzigen Fall bei dem in Python mit Klammern Tupel definiert werden – das leere Tupel: ``()``. Ansonsten ist es das *Komma* das Tupel definiert. Klammern braucht man dafür nur wenn der Code sonst nicht eindeutig wäre.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Verrückt.
Danke!
Antworten