鱼C论坛

 找回密码
 立即注册
查看: 1676|回复: 3

求解!!用yield求质数表遇到的迭代问题

[复制链接]
发表于 2018-3-3 17:13:32 | 显示全部楼层 |阅读模式

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

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

x
希望求出max_num内的所有质数,但只迭代出第一个数之后就迭代失败了,请问是哪里弄错了?

ps:文本缩进可能不正确,具体看图
def is_p(max_num):#求max_num以内的质数,输入的max_num>1
     for temp_num in (2,max_num+1):#取尽max_num以内的每一个数
          if temp_num == 2:
                yield 2
          else:
                flag = True
                for i in range(1,temp_num):
                     if temp_num % i == 0:#判断temp_num是否是质数
                           flag = False
                if flag:
                     yield temp_num#返回质数temp_num
yield.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-3 19:40:38 | 显示全部楼层
瞧见一个语法错误。
  1. def is_p(max_num):#求max_num以内的质数,输入的max_num>1
  2.      for temp_num in range(2,max_num+1):#取尽max_num以内的每一个数
  3.           if temp_num == 2:
  4.                 yield 2
  5.           else:
  6.                 flag = True
  7.                 for i in range(1,temp_num):
  8.                      if temp_num % i == 0:#判断temp_num是否是质数
  9.                            flag = False
  10.                 if flag:
  11.                      yield temp_num#返回质数temp_num
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-3 20:14:54 From FishC Mobile | 显示全部楼层
最后判断语句矛盾吧,flag为False还怎么反馈质数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 11:39:59 | 显示全部楼层
迭代不下去的主要问题就是第2行for/in迭代应该是range(...),缺的话只是两个元素的元组。
另外一处逻辑问题就是:
for i in range(1,temp_num):
                      if temp_num % i == 0:#判断temp_num是否是质数
这里应该用range(2,temp_num),从2开始
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 06:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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