阿你爸爸 发表于 2020-11-30 20:19:18

我错在哪儿了?

第009讲:数字类型(下)| 课后测试题及答案

在这一集的动手题目中,要求计算100万以内的偶数和。

参考答案给的代码如下:

i = 0
sum = 0

while i <= 1000000:
    if i % 2 == 0:
      sum = sum + i
    i = i + 1

print("1000000 以内所有偶数的和是", sum)

完美运行。

而我写的是这样的:

i = 0
sum = 0
while i <= 10:
    if i % 2 == 0:
      i = i + 1
    sum = sum + i
print("1000000以内所有偶数的和是",sum,end='')

F5运行之后,交互界面没有任何反应。关闭交互界面窗口的时候,提醒我有程序正在运行,是否要将它Kill掉。

讲真,参考答案我觉得我看懂了。但我自己的答案错在哪里了呢?

昨非 发表于 2020-11-30 20:21:57

本帖最后由 昨非 于 2020-11-30 20:24 编辑

i作为循环变量
必须保证经过一次循环无论如何都要加一
而你放在if判断里,当if条件不满足时,i+1就被“跳过”了
然后i不变,死循环


而且题目要求到10000000,直循环到10是不对的



而且
sum=sum+i必须放到if条件里,不然无论就都会加到sum里
结果就错了


总之

你把你的代码改成和答案一摸一样就对了

jackz007 发表于 2020-11-30 20:29:35

      何必那么麻烦?
i , sum = 0 , 0
while i <= 1000000:
    sum = sum + i
    i += 2
print("1000000以内所有偶数的和是",sum)
    这样写不简单吗?

张晨旺 发表于 2020-11-30 21:34:42

while i <= 10:
    if i % 2 == 0:
      i = i + 1

while 第一次执行 i=0
if成立,i+1
while 第二次执行 i=1
if不成立,i不加1
继续循环,每次if都不成立,i始终为1
所以形成了死循环。

阿你爸爸 发表于 2020-12-1 08:20:26

张晨旺 发表于 2020-11-30 21:34
while i

while第二次执行, i = 1
If不成立,i不加1

然后呢?会执行sum =sum + i 这一行吗?根据缩进来看,sum = sum + i是在while里面的,因此属于while循环的一部分,所以还是会执行一遍sunm = sunm + 1 的对吗?

因此程序的运行结果就变成了sum = 0+1+1+1+1+1+1+1+1+1+1+1+……+∞

我理解的对吗?

张晨旺 发表于 2020-12-1 10:20:37

阿你爸爸 发表于 2020-12-1 08:20
while第二次执行, i = 1
If不成立,i不加1



恩,sum=sum+1这句不在if判断里,但是在while循环里。所以sum一直执行的是sum=sum+1.最后就是sum一直+1+1+1+1.......
页: [1]
查看完整版本: 我错在哪儿了?