RichY-YikO 发表于 2023-9-21 20:01:31

萌新求助

萌新求助。为啥这个else和if对齐做出来就会有重复,往前缩进一个就不正常。{:10_266:}{:10_266:}老甲鱼讲的我没理解

>>> for n in range(2, 10):
        for x in range(2, n):
                if n % x == 0:
                        print(n, "=", x, "*", n // x)
                        break
                else:
                        print(n, "是一个素数")

                       
3 是一个素数
4 = 2 * 2
5 是一个素数
5 是一个素数
5 是一个素数
6 = 2 * 3
7 是一个素数
7 是一个素数
7 是一个素数
7 是一个素数
7 是一个素数
8 = 2 * 4
9 是一个素数
9 = 3 * 3

isdkz 发表于 2023-9-21 20:01:38

这个问题是因为else语句的位置不对导致的。在这个代码块中,else语句是与for循环对齐的,所以它会在内层循环的每次迭代结束后都执行一次。这不是我们想要的结果。

正确的做法是将else语句与if语句对齐,这样它就只会在内层循环完全迭代后才会执行。修改后的代码如下:

for n in range(2, 10):
    for x in range(2, n):
      if n % x == 0:
            print(n, "=", x, "*", n // x)
            break
    else:
      print(n, "是一个素数")


输出结果为:

2 是一个素数
3 是一个素数
4 = 2 * 2
5 是一个素数
6 = 2 * 3
7 是一个素数
8 = 2 * 4
9 = 3 * 3


这样就可以正确地输出素数和合数了。

RichY-YikO 发表于 2023-9-21 20:02:20

说错了,是往前缩进一个就正常了

RichY-YikO 发表于 2023-9-21 20:06:16

isdkz 发表于 2023-9-21 20:01
这个问题是因为else语句的位置不对导致的。在这个代码块中,else语句是与for循环对齐的,所以它会在内层循 ...

else应该是和for对齐吧

isdkz 发表于 2023-9-21 20:07:17

RichY-YikO 发表于 2023-9-21 20:06
else应该是和for对齐吧

就是要和内层的for对齐呀

RichY-YikO 发表于 2023-9-21 20:10:11

isdkz 发表于 2023-9-21 20:07
就是要和内层的for对齐呀

那为啥5的时候执行了三次,7的时候执行了5次

isdkz 发表于 2023-9-21 20:30:31

RichY-YikO 发表于 2023-9-21 20:10
那为啥5的时候执行了三次,7的时候执行了5次

你那个 else 跟 if 同级了呀

RichY-YikO 发表于 2023-9-21 20:35:15

isdkz 发表于 2023-9-21 20:30
你那个 else 跟 if 同级了呀

嗯嗯,懂了。谢谢大佬
页: [1]
查看完整版本: 萌新求助