明天要考试了,请问可以为学生解答一下疑惑吗😭

img


请问为什么i编写在if循环内就不能再次进入while循环啊,在if循环内不是同样给i赋值了吗,就像给sum赋值一样?

解决此问题,首先要了解两项内容:
(1)if分支和while循环的条件
if分支的条件是i%2==0,即i为偶数,成立时sum自增,而while循环的条件是i小于等于100时执行循环体。
(2)i+=1在if分支内时的程序运行过程
当i的自增(i+=1)写入if分支内时,i的初始值为1,小于等于100,满足了while循环的条件,所以进入循环。但这个i=1无法满足if分支的条件,即i为偶数,所以不进入if分支,第一遍的while循环结束,i仍为1,满足条件,进入第二次。
也就是说,在每一遍while循环里,i为1的值不会改变,永远满足while的条件,永远不满足if的条件。而改变i的值的语句在if分支中,若不进入if分支,i将一直保持初始值1,使得while循环的条件永远成立,该程序无穷。

在上述内容的基础上,我们可以下定结论:

所以,将i+=1写在if分支内并不是“不能再次进入while循环”,而是满足一系列条件,从而使while循环无限制地执行下去(直到内存配额或电量耗尽),而永远不进入if分支。

也可以使用一个小测试来理解上述结论与过程:

sum_ = 0
i = 1
while i <= 100:
    if i % 2 == 0:
        sum_ += i
        i += 1
        print('in if')
    print('in while')

执行这个程序,你将得到无穷无尽的'in while'输出,而没有'in if'输出,这代表着程序一直在while里打转转,而没有进入if。
记得使用Ctrl+C的组合键退出程序哦。
另:祝你考试顺利,正常发挥

因为 while 需要用到 i,你写在 while 里面 while 本身不知道有i啊

可以呀,然后if是条件判断,不是循环

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    解决方案:

    在if循环中为变量i赋值后,再次进入while循环可能会导致程序执行逻辑出现问题。这是因为在每次循环中,变量i的值都会被改变,进入if循环后i的值可能会改变,使得循环条件不成立,从而跳出while循环。而变量sum的值并不会影响循环条件,因此可以多次进入while循环。

    为了避免这种问题发生,可以采用以下两种解决方案:

    1. 尽可能避免在循环中为变量赋值:

    如果在循环中必须要为变量赋值,可以将赋值操作放在while循环之前。

    示例代码如下:

    i = 0
    while i < 10:
        print(i)
        i += 1
        if i == 5:
            j = i
    print(j)
    
    1. 使用不同的变量名:

    可以为if循环中赋值的变量使用不同的变量名,以避免与while循环中使用的变量名冲突。

    示例代码如下:

    i = 0
    while i < 10:
        print(i)
        i += 1
        if i == 5:
            temp_i = i
    print(temp_i)
    

    以上就是解决问题的两个方案,根据具体情况选择即可。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^