羊同学 发表于 2020-3-30 17:41:48

想知道代码错哪了 求100到500之间的素数

n=100
i=2
while 100<n<500:
    while 2<i<250:
      i+=1
      n+=1
      if n%i!=0 and n!=i:
            print(n)

qiuyouzhi 发表于 2020-3-30 17:43:20

在第二个while循环里。
你的i并不大于2,根本没有进入第二个while循环

羊同学 发表于 2020-3-30 17:48:28

萌新 求大佬们帮帮忙{:10_266:}{:10_266:}

BngThea 发表于 2020-3-30 17:51:03

你先把 n+= 1放到外层循环中去
再把 i+=1 放到内层循环的最后
if的判断问题也很大,再说

羊同学 发表于 2020-3-30 17:54:04

BngThea 发表于 2020-3-30 17:51
你先把 n+= 1放到外层循环中去
再把 i+=1 放到内层循环的最后
if的判断问题也很大,再说

!!好的 谢谢

羊同学 发表于 2020-3-30 17:57:26

羊同学 发表于 2020-3-30 17:54
!!好的 谢谢

我想让 n除以i得出来的余数不得零 且n i 不相等 我觉得这样的条件下能算出质数 这是错在哪了呢{:10_266:}

BngThea 发表于 2020-3-30 18:07:33

羊同学 发表于 2020-3-30 17:57
我想让 n除以i得出来的余数不得零 且n i 不相等 我觉得这样的条件下能算出质数 这是错在哪了呢

你得遍历所有的i以后才能下结论,而不是直接判断

羊同学 发表于 2020-3-30 18:11:12

BngThea 发表于 2020-3-30 18:07
你得遍历所有的i以后才能下结论,而不是直接判断

那应该咋表示呢是把条件放在内循环中 然后再写if吗

heidern0612 发表于 2020-3-30 18:12:57

本帖最后由 heidern0612 于 2020-3-30 18:27 编辑

羊同学 发表于 2020-3-30 18:11
那应该咋表示呢是把条件放在内循环中 然后再写if吗

#x取要求范围数,Y取X范围的除数(取不到X),可以整除便不是。

x=y=2
for x in range (2,500):
    for y in range(2,x):
      if(x%y==0):
            break
    else:
      print(x,end =" ")


#print(" ".join(f"{x}" for x in range(2,500) if not ))

羊同学 发表于 2020-3-30 18:59:13

heidern0612 发表于 2020-3-30 18:12
#x取要求范围数,Y取X范围的除数(取不到X),可以整除便不是。

一定要写 for in循环码
{:10_269:}

heidern0612 发表于 2020-3-30 19:07:34

本帖最后由 heidern0612 于 2020-3-30 19:12 编辑

羊同学 发表于 2020-3-30 18:59
一定要写 for in循环码

求范围数,用for循环是最省事的。

既然定义了范围查找,循环迭代就跑不了。

txxcat 发表于 2020-3-30 19:24:24

哎,问题没解决你就匆匆确认了最佳答案,标记已解决,你还能指望谁能真正帮到你?
你的代码不多,错误太多。
1.你n初始化就是100,100<n<500为False,根本就进不了循环。去掉那个小于判断就可以进循环了;
2.n的累进放进了内循环;
3.内循环和外循环一样的问题;
4.即使修改后可以进入内循环,但i值累进到了250退出内循环回到外循环,i>250,后面再也进不了内循环,所以i的初始化必须在外循环里面才能保证每次进入内循环;
5.所有循环正常了,你的判断逻辑又有问题,你只在内循环i为某值就判断出结果,比如n为102,i为5的时候,判断就是Ture,而实际上你要判断完所有的i值才能得到正确答案,你的算法无解。
按你的写法逻辑改写了一下程序:
n=100
while n<500:
    i=2
    n+=1
    zhishu=True    #假设n是质数
    while i<250:
      if n%i==0:   #一旦发现n能被i整除,就把质数状态改为False
            zhishu=False
            break       #都已经判断不是质数了,不用继续下面的判断了
      i+=1      #i初始值是2,也需要加入验证,累进要放到后面
    if zhishu:   #只能在外循环中才能打印,否则你只能看到不停闪动的数值
      print(n)
程序可以运行了,但是有好多优化的地方,一是这种情况下用for in range()远比while+累进要来的方便、直接、简洁。二是i值没必要设置2-250,只需要到n的一半就可以了,可以省掉很多循环。
for n in range(101,500):
    zhishu=True
    for i in range(2,n//2+1):
      if n%i==0:
            zhishu=False
            break
    if zhishu:
       print(n)
是不是精简很多?还有用函数,更方便更高效:
def zhishu(num):
    for i in range(2,num//2+1):
      if num%i==0:
            return False
   return True

for n in range(101,500):
    if zhishu(n):
      print(n)
页: [1]
查看完整版本: 想知道代码错哪了 求100到500之间的素数