鱼C论坛

 找回密码
 立即注册
查看: 121|回复: 8

[已解决]用while循环语句及continue语句打印10以内的基数

[复制链接]
发表于 2024-11-10 14:17:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我尝试用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值,然后回到while  i<10进行下一轮的循环.但这个程序运行后却一直打印1,麻烦大神指点一下,谢谢!
最佳答案
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 语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-10 14:39:02 | 显示全部楼层
jackz007 发表于 2024-11-10 14:23
当 i = 1 的时候,会陷入死循环,这样改:

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

谢谢你的讲解!但请教一下,你这里的if i % 2 :应该是代表着如果i能被2整除时才会执行内部的print(i)语句,应该打印出来的是偶数,但为何打印出来的却是基数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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,这就是在对整型数取布尔值时所遵循的规则。      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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:,是这意思吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

         没错!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-10 15:39:52 | 显示全部楼层

学习了,谢谢指点!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表