【问题标题】:Difference of declaring variable inside for loop and outside for loop在for循环内和在for循环外声明变量的区别
【发布时间】:2021-01-03 09:24:53
【问题描述】:

我尝试编写一个程序来打印一个数的因数并打印其丰富的因数。但是当我使用它时,我发现了一些问题。如果我在 for 循环内部和 for 循环外部声明一个名为“sum_abundant_factor”的变量,我不知道为什么输出不同。

“sum_abundant_factor”是我用来检查因子是否丰富的变量。 (丰富数是小于其真因数之和的数)。

这是我在 for 循环中声明“sum_abundant_factor”时的代码和输出:

input_number = int(input('Input number : '))
factor = ''
sum_factor = 0
abundant_factor = ''

for i in range(1, input_number+1):
    if input_number % i == 0:
        sum_abundant_factor = 0
        factor += str(i) + ' '
        if i < input_number :
           sum_factor += i
        for j in range(1, i):
           if i % j == 0:
              sum_abundant_factor += j
        if sum_abundant_factor > i:
           abundant_factor += str(i) + ' '

print('Factors of {} :'.format(input_number), factor)
print('Abundant Factors :', abundant_factor)

Output :
Input number : 54
Factors of 54 : 1 2 3 6 9 18 27 54
Abundant Factors : 18 54

这是我在 for 循环之前(外部)声明“sum_abundant_factor”时的代码和输出:

input_number = int(input('Input number : '))
factor = ''
sum_factor = 0
abundant_factor = ''
sum_abundant_factor = 0

for i in range(1, input_number+1):
    if input_number % i == 0:
        factor += str(i) + ' '
        if i < input_number:
           sum_factor += i
        for j in range(1, i):
           if i % j == 0:
              sum_abundant_factor += j
       if sum_abundant_factor > i:
           abundant_factor += str(i) + ' '

print('Factors of {} :'.format(input_number), factor)
print('Abundant Factors :', abundant_factor)

Output :
Input number : 54
Factors of 54 : 1 2 3 6 9 18 27 54
Abundant Factors : 6 9 18 27 54

我不知道为什么当我在 for 循环内外声明变量时,丰富的因子输出是不同的。谁能帮我解释一下?

【问题讨论】:

  • 对于每个循环,sum_abundant_factor 最初将设置为 0。在循环外部声明后,它将保持其值,并且最初不会为 0。你不断增加它的价值,但在每次运行之前都不会重置。
  • 哦,我明白了,谢谢你的解释。

标签: python for-loop


【解决方案1】:

如果在循环内声明了sum_abundant_factor = 0,则每次当它是range 的下一个元素时,它都会将sum_abundant_factor 重置为0

这是一个更简单的例子:

a = [1, 2, 3]
for i in a:
    b = 0
    b += i
    print(b)

每次它是a 列表中的下一个元素时,它会将b 重置为0,因此将0 添加到i 不会改变迭代器i,因此上面的代码会输出:

1
2
3

而如果您在循环外定义 b 变量:

a = [1, 2, 3]
b = 0
for i in a:
    b += i
    print(b)

它会输出:

1
3
6

因为不会重置,所以会一直加,所以0 + 11(第一个打印值),1 + 23(第二个打印值),3 + 3是@ 987654341@(第三个打印值)。

【讨论】:

    【解决方案2】:

    如果你把sum_abundunt_factor放在for循环中,每次循环时,如果if input_number % i == 0:发生,即使你有sum_abundant_factor += j之类的代码,它也会被设置为0。它会输出该数字,但是当 if 语句发生时,下次您循环遍历它时会重置为 0。如果将其留在外面,则只会在每次出现 sum_abundant_factor += j 时添加该号码。该数字不会被重置为 0,因为它在 for 循环之外

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 2020-03-11
      • 2016-05-06
      • 2011-05-28
      相关资源
      最近更新 更多