@Questions228

В чем отличие строки (n1,n2=n2,n1+n2) и строк (n1 = n2 and n2 = n1+n2)?

Условие задачи : Каждый следующий элемент ряда Фибоначчи получается при сложении двух предыдущих. Найдите сумму всех четных элементов ряда Фибоначчи, которые не превышают четыре миллиона.
Пример : Начиная с 1 и 2, первые 10 элементов будут: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
def fibonacci_number_1():
n1 = 0
n2 = 1
count = 0
while n2 < 4000000:
if n2 % 2 == 0:
count += n2
print("***", n2, "***")
#вывожу все числа остаток которых равен 0, при делении на 2
# n1,n2 = n2, n1+n2 - Данная строка правильно выполняет условие задачи.
n2 = n1 + n2
print(n1, n2)
n1 = n2
print(n1, n2)

return "Фибоначи 1", count
Вопрос: 1. В чем отличие строки (n1,n2=n2,n1+n2) и строк (n1 = n2 and n2 = n1+n2)?
2. Почему при выполнении данного условия программа странно работает в первых четырех строчках вывода результата? Объясните мне !!!
Приложение вывода результата:
6050ee519abd2167092573.png
  • Вопрос задан
  • 286 просмотров
Решения вопроса 2
@fatmos
Во втором случае нужна третья переменная : b=n2>
n2 =n1+n2 > n1=b
Иначе пропадает значение в переменной n1 или же переписывается на значение переменной n2 .

Тогда n2=n1+n2 становится равным n2=n2+n2 . По этому такие приколы 16 32.

В первом случае замена переменных считай что происходит одновременно . Это как дать команду поменять содержимое ведра с дёгтем и ведра с мёдом , но так чтобы не смешались .

Когда использовал ( n1=n2 , n2=n1+n2 ):"замена вёдер со смешиванием дёгтя и мёда "
происходит переписывание n1 на n2 и потерей числа 'сидящего' в переменной n1 ,
т.к ты приказал поместить туда число 'сидящее' в n2 , поэтому для этого требуется
третья пустая переменная ,
чтобы не потерять содержимое в переменной n1 , иначе Аля-Улю полетели волосы уарестантов
Ответ написан
@alexbprofit
Junior SE
def fib(n):
    i = 0
    x1 = 0
    x2 = 1
    result = []
    while i < n:
        x3 = x1 + x2
        result.append(x1)
        x1 = x2
        x2 = x3
        i += 1
    return result
    

def summa(n):
    start = fib(n)
    end = []
    i = 0
    while i < n:
        if start[i] % 2 == 0:
            end.append(start[i])
        i += 1
    return sum(end), sum(end) < 4000000
    
if __name__ == "__main__":
    n = int(input("Введите количество елементов: "))
    if summa(n)[1]:
        print(summa(n)[0])
        
    else:
        print("Сумма четных елементов больше 4000000")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы