gpt4 book ai didi

python - for循环内和for循环外声明变量的区别

转载 作者:行者123 更新时间:2023-12-04 15:09:03 26 4
gpt4 key购买 nike

我尝试编写一个程序来打印一个数的因数并打印其丰富的因数。但是当我使用它时,我发现了一些问题。如果我在 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,则每次当 sum_abundant_factor范围

这是一个更简单的例子:

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 + 36(第三个打印值)。

关于python - for循环内和for循环外声明变量的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65548266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com