The*_*son 0 python math for-loop
鉴于此Python程序:
num = input("Enter a number: ")
result = 1024
for i in range(num):
result = result / 2
print result
Run Code Online (Sandbox Code Playgroud)
如果输入的数字是4,为什么这个程序的输出是64?
tem*_*def 12
跟踪程序,看看会发生什么. 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.
更一般地说,循环的每次迭代将除以result2,因此在循环的num次迭代之后,result将是1024/2 num.由于1024 = 2 10,这意味着,其结果是2 10 /2 NUM = 2 10 - NUM.也就是说,如果num > 10,因为result是一个整数,Python将向下舍入为零.换一种说法:
range(num)则为空范围,程序打印1024.希望这可以帮助!
只需在代码中添加一些调试语句,即可看到正在发生的事情:
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
Run Code Online (Sandbox Code Playgroud)
如果你运行并输入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
Run Code Online (Sandbox Code Playgroud)
原因是它range(4)为您提供了[0,1,2,3]包含四个元素的列表,因此这是循环体执行的次数.
在每次执行主体时,您只需将结果的当前值减半:
iteration 1, 1024 -> 512
iteration 2, 512 -> 256
iteration 3, 256 -> 128
iteration 4, 128 -> 64
Run Code Online (Sandbox Code Playgroud)