Условие не должно выполнятся, но оно выполняется
Если a>65, не должно выполняться последнее условие, но тем не менее, оно выполняется. Почему?
import random
N1 = "PzKpfw V Panther"
a = random.randint(0, 100)
b = random.randint(80, 120)
c = random.randint(75,105)
r = random.randint(0, 100)
r1 = random.randint (0,100)
print (a)
br1=90
hp = 450
N2 = "т34-85"
d = random.randint(0,100)
e = random.randint(80,110)
f = random.randint(80,105)
br2=90
hp2= 450
if br1==90:
print ("PzKpfw V Panther делает выстрел")
if a<65:
print ("Попадание")
if a>65:
print ("Промах!")
if r<11:
print ("Рикошет")
if b>br2&r>11&a<65:
print ("Броня "+str(N2)+" пробита!")
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Согласно таблице приоритетов выполнения операций побитовое И (&) имеет более высокий приоритет выполнения по сравнению с операторами сравнения. Таким образом сначала выполняются операции побитового И слева-направа и только потом производится сравнение:
b>br2 & r>11 & a<65
будет выполняться в следующем порядке:
br2 & r- назовём переменнойbr2_and_r11 & a- назовём11_and_a(b > br2_and_r > 11_and_a) < 65
Пример:
In [87]: a, b, br2, r = 80, 100, 90, 50
In [88]: b>br2 & r>11 & a<65 # 100>90 & 50>11 & 80<65
Out[88]: True
In [89]: b > (br2 & r) > (11 & a) < 65
Out[89]: True
Совет: используйте логическое И (and) вместо побитового И (&):
In [90]: b>br2 and r>11 and a<65
Out[90]: False
и если не уверены в порядке выполнения операций - используйте скобки