Неверный синтаксис python проблема (если оператор много действий) - PullRequest
0 голосов
/ 22 марта 2020

У меня проблема с кодом python. Я пытаюсь увеличить и уменьшить два значения после оператора if. Однако это не может быть достигнуто (ошибка: неверный синтаксис). Зная, что когда я увеличиваю только одно значение (например, A_p), это работает хорошо. Ошибка приходит от оператора and? Есть ли способ выполнить несколько действий после оператора if?

Спасибо.

Omer

k1 = 0.2
k2 = 0.2 
Delta_t = 2


A_p = 4
B_p = 3


list_nm = [0.800, 0.801, 0.752, 0.661, 0.169, 0.956, 0.949, 0.003, 0.201, 0.291, 0.615, 0.131, 0.241, 0.685, 0.116, 0.241, 0.849]

for i in range(7):
    if list_nm[i] < (A_p/7):
        print("Particle A was choosen")
        if list_nm[i] < k1*Delta_t:
            A_p -= 1 and B_p += 1
        else:
            A_p = A_p and B_p = B_p
    elif list_nm[i] < (B_p/7):
        print("Particle B was choosen")
        if list_nm[i] < k2*Delta_t:
            A_p +=1 and B_p -=1
        else:
            A_p = A_p and B_p = B_p
    else:
        print("No choice was made")
        A_p = A_p and B_p = B_p
print(B_p)

1 Ответ

0 голосов
/ 22 марта 2020
A_p -= 1 and B_p += 1

недопустимо Python, and - это заданное ключевое слово c, используемое для объединения логических выражений, например:

if a > 3 and a < 7:
    pass

Вместо этого вам нужны два отдельных оператора. :

A_p -= 1
B_p += 1

или, если вы должны иметь его в одной строке (и я бы спросил почему вы считаете это необходимым), один из Следующее, в зависимости от того, что вы предпочитаете:

A_p -= 1 ; B_p += 1
(A_p, B_p) = (A_p - 1, B_p + 1)

Кроме того, строка:

A_p = A_p and B_p = B_p

, даже если вы разделите ее на два оператора, фактически ничего не делает. Вы также можете полностью удалить его вместе со строкой else:, предшествующей ему, если это единственное, что есть в блоке else.

Другими словами, начните с чего-то такого:

(k1, k2, Delta_t) = (0.2, 0.2, 2)
(A_p, B_p) = (4, 3)

list_nm = [0.800, 0.801, 0.752, 0.661, 0.169, 0.956, 0.949, 0.003, 0.201, 0.291, 0.615, 0.131, 0.241, 0.685, 0.116, 0.241, 0.849]

for i in range(7):
    if list_nm[i] < (A_p / 7):
        print("Particle A was choosen")
        if list_nm[i] < k1 * Delta_t:
            A_p -= 1
            B_p += 1
    elif list_nm[i] < (B_p / 7):
        print("Particle B was choosen")
        if list_nm[i] < k2 * Delta_t:
            A_p += 1
            B_p -= 1
    else:
        print("No choice was made")
print(B_p)
...