在此岸 发表于 2022-3-15 20:54:11

为什么我的range函数右边的数值不在运行包括范围

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

结果:
他是一个素数
4 = 2 * 2
他是一个素数
他是一个素数
他是一个素数
6 = 2 * 3
他是一个素数
他是一个素数
他是一个素数
他是一个素数
他是一个素数
8 = 2 * 4
他是一个素数
9 = 3 * 3

问题:
2这个数值为什么没有包含在内?

isdkz 发表于 2022-3-15 20:55:29

range 本来就是 左闭右开 的呀,右边的数值不包括是很正常的

在此岸 发表于 2022-3-15 20:58:47

isdkz 发表于 2022-3-15 20:55
range 本来就是 左闭右开 的呀,右边的数值不包括是很正常的

左闭右开的话,2应该也算在内的呀,小甲鱼的视频里也包括了2的
有2所对应的结果

isdkz 发表于 2022-3-15 21:02:16

本帖最后由 isdkz 于 2022-3-15 22:07 编辑

在此岸 发表于 2022-3-15 20:58
左闭右开的话,2应该也算在内的呀,小甲鱼的视频里也包括了2的
有2所对应的结果

但是右开是 首要前提,右边的值肯定是不包含在内的,

你的代码里没有把 n 加一,导致第一个 n 是 2 的时候没有把 2 包含在里面。

for n in range(2,10):
    for x in range(2,n + 1):   # 注意这里
      if n % x == 0:
            print(n,"=",x,"*",n//x)
            break
      else:
            print("他是一个素数")

hrpzcf 发表于 2022-3-15 21:13:46

代入看一下,当第一个for循环n是2的时候,第二个for就是for x in range(2, 2),问题就很明显了,range(2, 2)是没有任何值的,所以n是2的时候根本没有进入第二个循环。

在此岸 发表于 2022-3-16 09:36:50

isdkz 发表于 2022-3-15 21:02
但是右开是 首要前提,右边的值肯定是不包含在内的,

你的代码里没有把 n 加一,导致第一个 n 是 2...

谢谢,我懂了{:9_232:}

在此岸 发表于 2022-3-16 09:37:47

hrpzcf 发表于 2022-3-15 21:13
代入看一下,当第一个for循环n是2的时候,第二个for就是for x in range(2, 2),问题就很明显了,range(2, 2 ...

谢谢,我懂了{:9_228:}
页: [1]
查看完整版本: 为什么我的range函数右边的数值不在运行包括范围