Во второй версии, когда flag
равен 1, вы устанавливаете его равным 0, а затем сразу же проверяете его снова. Поскольку flag
теперь равно 0, в итоге вы выполняете обе ветви оператора if:
while(i < 25):
if(flag==1): # Flag is initially set to 1, so this is True
s += (x**i)/(m.factorial(i))
flag=0 # Flag is now set to 0
if(flag==0): # Flag just became 0, so this is now True!
s -= (x**i)/(m.factorial(i)) # This undoes the first calculation
flag=1
i += 2
print(s)
В результате код обновляется s
только тогда, когда flag
равен 0, и фактически ничего не делает когда flag
равен 1. Это можно исправить с помощью else
или elif
, чтобы каждый раз выполнялась только одна ветвь оператора if через l oop:
while(i < 25):
if(flag==1):
s += (x**i)/(m.factorial(i))
flag=0
else: # This avoids comparing flag a second time
s -= (x**i)/(m.factorial(i))
flag=1
i += 2
Это дает то же значение, что и ваш первый подход.