鱼C论坛

 找回密码
 立即注册
查看: 1371|回复: 5

[已解决]请问为啥 这两段代码到9的时候都会出错呢?

[复制链接]
发表于 2023-5-31 20:55:41 | 显示全部楼层 |阅读模式

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

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

x
begin = int(input('enter begin: '))
end = int(input('enter end: '))

for i in range(begin, end+1):
        if i > 1:
                is_prime = True
#开始判断
                for j in range(2, i):
                        if i % j == 0:
                                is_prime = False
                                break
                        if is_prime:
                                print(i, 'is a prime number')
                        else:
                                print(i, 'is not a prime number')
        else:
                print(i, 'is not a prime number')



begin = int(input('enter begin'))
end = int(input('enter end'))
for i in range(begin, end+1):
    if i < 3:
        print(i, 'is a prime number')
#开始判断
    for j in range(2, i):
        if (i % j == 0):
            print(i, 'is not a prime number')
            break
        else:
            print(i, 'is a prime number')
            break


当第二段代码运行到开始判断之后
for j in range(2, i):
        if (i % j == 0):
            print(i, 'is not a prime number')
            break
到这一段的时候 i == 9  枚举j 到3时 i % 9 !=0  这时候就应该 打印 9非素数 然后break了不是吗?

第一段代码则是 第八行之后
                for j in range(2, i):
                        if i % j == 0:
                                is_prime = False
                                break
                        if is_prime:
                                print(i, 'is a prime number')
                        else:
                                print(i, 'is not a prime number')
                              
首先这是枚举到 i= 9 然后 枚举 j到3  i % j == 0   is_prime 被赋False  然后下面判断is_prime 然后不是应该输出'is not a prime number 吗?
最佳答案
2023-5-31 20:59:17
对于你的第二段代码,当 `i == 9`,并且在循环到 `j == 3` 的时候,你的判断 `i % j == 0` 是正确的,这会导致代码打印出 "9 is not a prime number",然后退出这个循环。然而,这个循环是嵌套在 `for i in range(begin, end+1):` 循环里的,因此它会在下一次迭代中继续执行,此时 `i == 10`。

对于你的第一段代码,当 `i == 9` 且 `j == 3` 时,`i % j == 0` 的确是成立的,这会导致 `is_prime` 被设置为 `False`,然后退出这个 `j` 的循环。然后代码会根据 `is_prime` 的值打印出 "9 is not a prime number"。这和你的理解是一致的。

这里我想可能存在的误解是,`break` 语句只会退出最近的循环。也就是说,即使在内部 `j` 循环中遇到了 `break`,外部 `i` 循环还是会继续执行的。对于第二段代码,由于每次 `j` 循环结束时都会打印结果,所以可能会出现重复打印的情况。这是因为一旦 `i % j == 0` 不满足,就会执行 `else` 分支并打印出 "is a prime number",即使之前在这个 `i` 的循环中已经打印过 "is not a prime number"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-31 20:59:17 | 显示全部楼层    本楼为最佳答案   
对于你的第二段代码,当 `i == 9`,并且在循环到 `j == 3` 的时候,你的判断 `i % j == 0` 是正确的,这会导致代码打印出 "9 is not a prime number",然后退出这个循环。然而,这个循环是嵌套在 `for i in range(begin, end+1):` 循环里的,因此它会在下一次迭代中继续执行,此时 `i == 10`。

对于你的第一段代码,当 `i == 9` 且 `j == 3` 时,`i % j == 0` 的确是成立的,这会导致 `is_prime` 被设置为 `False`,然后退出这个 `j` 的循环。然后代码会根据 `is_prime` 的值打印出 "9 is not a prime number"。这和你的理解是一致的。

这里我想可能存在的误解是,`break` 语句只会退出最近的循环。也就是说,即使在内部 `j` 循环中遇到了 `break`,外部 `i` 循环还是会继续执行的。对于第二段代码,由于每次 `j` 循环结束时都会打印结果,所以可能会出现重复打印的情况。这是因为一旦 `i % j == 0` 不满足,就会执行 `else` 分支并打印出 "is a prime number",即使之前在这个 `i` 的循环中已经打印过 "is not a prime number"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-31 21:04:57 | 显示全部楼层
sfqxx 发表于 2023-5-31 20:59
对于你的第二段代码,当 `i == 9`,并且在循环到 `j == 3` 的时候,你的判断 `i % j == 0` 是正确的,这会 ...

你看 我这一句
    for j in range(2, i):
        if (i % j == 0):
            print(i, 'is not a prime number')
            break
不管break跳出哪个循环
他至少已经输出了一次9不是素数了吧 为啥结果里面都没有呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-31 21:06:16 | 显示全部楼层
sfqxx 发表于 2023-5-31 20:59
对于你的第二段代码,当 `i == 9`,并且在循环到 `j == 3` 的时候,你的判断 `i % j == 0` 是正确的,这会 ...


吊诡的是 会不会 他直接跳过了这一步吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-31 21:10:04 | 显示全部楼层
sfqxx 发表于 2023-5-31 20:59
对于你的第二段代码,当 `i == 9`,并且在循环到 `j == 3` 的时候,你的判断 `i % j == 0` 是正确的,这会 ...

哦 明白了 明白了 结构问题 导致只要不能被
2整除就会打印是素数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-31 21:10:28 | 显示全部楼层
mumei2018 发表于 2023-5-31 21:10
哦 明白了 明白了 结构问题 导致只要不能被
2整除就会打印是素数

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 07:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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