LEEFEI571 发表于 2024-11-10 14:17:56

用while循环语句及continue语句打印10以内的基数

我尝试用while循环语句及continue语句打印10以内的基数,程序如下:
i = 0

while i < 10:
    if i % 2 == 0:
      i += 1
      continue
print(i)

我的逻辑是当i一开始等于0时进入while循环语句,此时i % 2 等于0, i += 1后i变成1,此时运行continue语句后打印i值,然后回到whilei<10进行下一轮的循环.但这个程序运行后却一直打印1,麻烦大神指点一下,谢谢!

jackz007 发表于 2024-11-10 14:23:44

本帖最后由 jackz007 于 2024-11-10 14:37 编辑

i = 0
while i < 10:
    if i % 2 == 0:
      i += 1      # 循环变量必须无条件更新,不可以条件性更新
      continue
print(i)            # 需要在循环中打印信息的 print() 语句必须纳入循环范围
      当 i = 1 的时候,会陷入死循环,这样改:
i = 0
while i < 10:
    if i % 2 :      # 如果 i 为奇数
      print(i)      # 便打印之
    i += 1            # 注意此句的缩进位置,循环变量必须无条件更新
      当 i 是偶数的时候,不管它就好了,不需要 continue 语句

FishC 发表于 2024-11-10 14:24:10

你的程序有一个小问题:`print(i)`语句没有缩进到`while`循环内部,所以它只会在循环结束后执行一次。你需要将`print(i)`放在`while`循环内,并在`continue`语句之后增加`i += 1`,以确保每次循环都能正确地更新`i`的值。以下是修正后的代码:

i = 0

while i < 10:
    if i % 2 == 0:
      i += 1
      continue
    print(i)
    i += 1

这样,程序会打印出10以内的奇数:1, 3, 5, 7, 9。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

LEEFEI571 发表于 2024-11-10 14:39:02

jackz007 发表于 2024-11-10 14:23
当 i = 1 的时候,会陷入死循环,这样改:

      当 i 是偶数的时候,不管它就好了,不需要 ...

谢谢你的讲解!但请教一下,你这里的if i % 2 :应该是代表着如果i能被2整除时才会执行内部的print(i)语句,应该打印出来的是偶数,但为何打印出来的却是基数?

FishC 发表于 2024-11-10 14:39:09

LEEFEI571 发表于 2024-11-10 14:39
谢谢你的讲解!但请教一下,你这里的if i % 2 :应该是代 ...

在你的代码中,`if i % 2 == 0:`这一行的意思是“如果`i`能被2整除”,也就是说`i`是偶数。`continue`语句会导致循环跳过当前循环的剩余部分,直接进入下一个循环迭代。这意味着当`i`是偶数时,`print(i)`不会被执行,因为循环会在`continue`之后立即开始下一次迭代。

所以逻辑是这样的:
- 如果`i`是偶数(`i % 2 == 0`为真),程序执行`i += 1`,然后`continue`跳到下一个循环迭代,`print(i)`不执行。
- 如果`i`是奇数,程序不会执行`continue`,而是直接执行`print(i)`,然后`i += 1`,输出奇数。

这就是为什么打印出来的是奇数,而不是偶数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-11-10 14:43:50

本帖最后由 jackz007 于 2024-11-10 14:50 编辑

LEEFEI571 发表于 2024-11-10 14:39
谢谢你的讲解!但请教一下,你这里的if i % 2 :应该是代表着如果i能被2整除时才会执行内部的print(i)语句, ...

       if i % 2 的意思是,如果 i 对 2 取的余不为 0,也就是如果 i 为奇数,因为,只有奇数对 2 取余才不为 0
       数值和布尔值之间的对应关系是:
0      -         False
!= 0      -         True
       就是说,0 对应于 False,非 0 对应于 True,这就是在对整型数取布尔值时所遵循的规则。      

LEEFEI571 发表于 2024-11-10 15:22:18

jackz007 发表于 2024-11-10 14:43
if i % 2 的意思是,如果 i 对 2 取的余不为 0,也就是如果 i 为奇数,因为,只有奇数对 2 取余 ...

所以也就是说 if i % 2:的全写是if i % 2 != 0:,是这意思吧?

jackz007 发表于 2024-11-10 15:22:53

LEEFEI571 发表于 2024-11-10 15:22
所以也就是说 if i % 2:的全写是if i % 2 != 0:,是这意思吧?

         没错!

LEEFEI571 发表于 2024-11-10 15:39:52

jackz007 发表于 2024-11-10 15:22
没错!

学习了,谢谢指点!
页: [1]
查看完整版本: 用while循环语句及continue语句打印10以内的基数