mumei2018 发表于 2023-5-31 20:55:41

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

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到3i % j == 0   is_prime 被赋False然后下面判断is_prime 然后不是应该输出'is not a prime number 吗?

sfqxx 发表于 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"。

mumei2018 发表于 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不是素数了吧 为啥结果里面都没有呢

mumei2018 发表于 2023-5-31 21:06:16

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

吊诡的是 会不会 他直接跳过了这一步吧

mumei2018 发表于 2023-5-31 21:10:04

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

哦 明白了 明白了 结构问题 导致只要不能被
2整除就会打印是素数

sfqxx 发表于 2023-5-31 21:10:28

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

对的~
页: [1]
查看完整版本: 请问为啥 这两段代码到9的时候都会出错呢?