Почему переменная не изменяется вне цикла?
Имеется цикл, который должен увеличивать переменную n пока вещественная часть комплекснного числа, после возведения в куб не станет равна еденице
n = 0
r = complex(n, 6)**3
while r.real != 1:
print(r)
n += .1
Проблема этого кода в том, что переменная r не изменяется и цикл становиться бесконечным. При том, что переменная n без осечек инкрементируется на на одну десятую
Ответы (2 шт):
Чисто технически ваш код должен бы выглядеть так, как ниже (теперь r пересчитывается после каждого изменения n, до этого она была вне цикла). Решит ли это основную задачу - не знаю, но поставленную проблему ("Проблема этого кода в том, что переменная r не изменяется") решает.
n = 0
r = complex(6, n)**3
while r.real != 1:
print(r)
n += .1
r = complex(6, n)**3
При изменении переменной n переменнаяr и не должна меняться.
В строчке
r = complex(6, n)**3
вы просто создаёте объект типа complex, передавая в поля real и imag объекты объект 6 и переменную n (под которой лежит объект 0). В процессе присваивания в памяти создаются новые объекты типа float (6 и 0) и они сразу же передаются в поля комплексного числа. Так 'r.imag' становится 6, r.real становится равным 0. Объект, на который ссылается n и на которые ссылается real - два разных объекта и они меняются вне зависимости друг от друга.