Получение "SyntaxError: Неверный синтаксис", но не знаю почему - PullRequest
0 голосов
/ 01 мая 2019

Получение "SyntaxError: Неверный синтаксис", но не знаю почему

  File "cursor4.py", line 138
    global D=-1*((self.meteor_x_coordlist[i]-self.meteor_x_coordlist[i+1])+(self.meteor_y_coordlist[i]-self.meteor_y_coordlist[i+1]))
            ^
SyntaxError: invalid syntax

Вот код:

for i in range(8):
    if ((self.meteor_x_coordlist[i]-self.meteor_x_coordlist[i+1])+(self.meteor_y_coordlist[i]-self.meteor_y_coordlist[i+1])) < 0:
        global D=-1*((self.meteor_x_coordlist[i]-self.meteor_x_coordlist[i+1])+(self.meteor_y_coordlist[i]-self.meteor_y_coordlist[i+1]))
    if D**0.5<(self.sizelist[i]/2)+(self.sizelist[i+1]/2):
        #print "-----------------------"
        self.meteorlist.remove(self.meteorlist[i])
        if self.meteorlist == []:
            pass   #psu

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Я думаю это потому, что вы используете global здесь странным образом. Глядя на этот урок , возможно, сделайте это так:

global D
for i in range(8):
    test = ((self.meteor_x_coordlist[i]-self.meteor_x_coordlist[i+1])+(self.meteor_y_coordlist[i]-self.meteor_y_coordlist[i+1]))
    if test < 0:
        D=-1*test
    if D**0.5<(self.sizelist[i]/2)+(self.sizelist[i+1]/2):
        #print "-----------------------"
        self.meteorlist.remove(self.meteorlist[i])
        if self.meteorlist == []:
            pass   #psu 
0 голосов
/ 01 мая 2019

Вы не можете объединить оператор global с присваиванием. Если вам нужны оба, поместите их в отдельные строки:

global D
D = whatever

Но использование глобальных переменных часто является плохой идеей. Обычно вы можете получить, используя локальные переменные или переменные экземпляра в объектно-ориентированном коде. Использование переменных экземпляра намного лучше, чем использование глобальных переменных, так как вы можете использовать много объектов одновременно, без того, чтобы все они спотыкались друг о друга, используя одинаковые имена переменных.

Если вы просто добавили строку global, чтобы исправить проблему с D, возможно, это связано с тем, что вы присваиваете ей только условно, а следующий тест if ожидает, что она всегда будет иметь значение. В этом случае вы, вероятно, захотите сохранить D локальной переменной, вам просто нужно инициализировать ее перед началом цикла:

D = initial_value

for i in range(8):
    if something:
        D = new_value

    if some_condition(D): # this line requires D to always have a value!
        ... # do stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...