使用循环的Python程序
给定这个Python程序:
num = input("Enter a number: ")
result = 1024
for i in range(num):
result = result / 2
print result
如果你输入的数字是4,为什么这个程序的输出是64呢?
2 个回答
5
你可以通过在代码中添加一些调试语句来看看发生了什么:
num = input("Enter a number: ")
result = 1024
print "Starting result %d"%(result)
print range(num)
for i in range(num):
result = result / 2
print "Looping result %d"%(result)
print result
如果你运行这个代码并输入4,你会看到:
Enter a number: 4
Starting result 1024
[0, 1, 2, 3]
Looping result 512
Looping result 256
Looping result 128
Looping result 64
64
原因是 range(4)
会给你一个包含四个元素的列表 [0,1,2,3]
,所以循环的主体会执行四次。
在每次执行循环主体时,你只是将当前结果的值减半:
iteration 1, 1024 -> 512
iteration 2, 512 -> 256
iteration 3, 256 -> 128
iteration 4, 128 -> 64
11
跟着程序走一遍,看看发生了什么。这里的 range(num)
是 range(4)
,它会给出 0、1、2 和 3 这些值。
当 i = 0 时,我们把 1024 除以 2,得到 512。
当 i = 1 时,我们把 512 除以 2,得到 256。
当 i = 2 时,我们把 256 除以 2,得到 128。
当 i = 3 时,我们把 128 除以 2,得到 64。
就这样!你得到了 64。
更一般来说,每次循环都会把 result
除以 2,所以经过 num 次循环后,result
就是 1024 除以 2 的 num 次方。因为 1024 = 2 的 10 次方,这意味着结果是 2 的 (10 - num) 次方。也就是说,如果 num > 10
,因为 result
是一个整数,Python 会把它向下取整到零。换句话说:
- 如果输入的数字是负数,
range(num)
就是一个空范围,程序会打印 1024。 - 如果输入的数字在 0 到 10 之间,结果是 2 的 (10 - num) 次方。
- 如果输入的数字大于 10,结果就是 0。
希望这对你有帮助!