Приведенный ниже код работает нормально, но может ли кто-нибудь объяснить мне, что происходит после предложения for i in range(n) как изменяется значение или как оно добавляется, когда я ввожу другое значение для n.

Код выглядит следующим образом: -

def fib():

    old = 0
    new = 1
    new_num = 1 #fibonacci number which will change
                #depending on the value of n.

    n = int(input("Please enter a number: "))
    for i in range(n):
        new_num = old + new
        new = old
        old = new_num
        new_num = new_num

    if n <= 0:
            print ("Please enter a number greater than 0.")
    elif n == 1:
            print ("The value is 1.")
    else:
            print ("The value is %s." % (new_num))

fib()

Как я уже упоминал, я получаю правильный ответ, но не могу полностью понять, как работает код, и меняю значение ПОСКОЛЬКУ "N" НИ С чем не связано.

-1
user3822016 9 Июл 2014 в 23:54

4 ответа

Лучший ответ

Каждый раз, когда вы проходите цикл, вы заменяете старые числа только что созданными. n соответствует тому, что вы ввели. Допустим, вы ввели 4. Цикл for будет выполняться от 0 до 3 (4 раза). Сначала он добавляет значения old и new для создания new_num теперь, когда у вас есть следующий номер в серии, затем он перезаписывает старые значения old и new до двух последних значений в серии. Он продолжает делать это до тех пор, пока цикл не закончится.

когда i = 0; старый = 0; новый = 1; new_num = 1

когда i = 1; старый = 1; новый = 1; new_num = 2

когда i = 2; старый = 2; новый = 1; new_num = 3

когда i = 3; old = 3; новый = 2; new_num = 5

0
Community 20 Июн 2020 в 09:12

Похоже, вы привыкли к циклам for из C или другого языка с похожими конструкциями. В Python for i in range(n): означает "запустить код внутри этого блока один раз для каждого значения в списке чисел между 0 и n-1, устанавливая i для каждого числа по очереди" . (Технически в Python 3 это не список, а итератор, который генерирует числа последовательно, не сохраняя их в списке, но в данном случае разница академическая.)

Так:

  1. n устанавливается на основании пользовательского ввода с помощью функции input().
  2. n используется в качестве аргумента для функции range(), которая, конечно, не изменяет значение n (она просто создает список номеров n). Затем цикл for выполняется один раз для каждого числа в списке.
  3. n используется для определения вывода в операторе if / elif / else, опять же без изменения значения n.
1
Andrew Gorcester 9 Июл 2014 в 20:05

Цикл выполняется n раз. Каждый раз, когда цикл выполняется, он вычисляет i-е значение на основе предыдущих вычисленных значений. Он не меняет n, просто использует n как показатель того, сколько раз он должен оценивать.

0
Skip Saillors 9 Июл 2014 в 20:04

Я прокомментировал ваш код за вас. Прежде чем пытаться понять свой код, вы должны знать на 100%, что число Фибоначчи - это сумма двух чисел в последовательности перед ним.

Это важно знать, так как «новое» и «старое» являются держателями места.

** Также примечание: ** N связано с чем-то, диапазоном. N решает, какой индекс в диапазоне Фибоначчи вы хотите определить.

def fib():

new = 1
old = 0
new_num = 1 #fibonacci number which will change
            #depending on the value of n.

n = int(input("Please enter a number: "))

for i in range(n):  # This is where the value of N is used 
    new_num = new + old  # new_num is the fibonacchi number at index "i", so to get it add the two before us
    old = new  # Update the old place holder (which is what new was, as we're updating new next)
    new = new_num  # Update new to be what we just calculating, so we can use it on the next iteration
    new_num = new_num  # Does nothing. Remove this line

if n <= 0:
        print ("Please enter a number greater than 0.")
elif n == 1:
        print ("The value is 1.")
else:
        print ("The value is %s." % (new_num))

fib()

Как всегда, любые вопросы просто оставляйте в комментариях ниже!

0
Greg Hilston 9 Июл 2014 в 20:06