鱼C论坛

 找回密码
 立即注册
查看: 1868|回复: 2

萌新小白求助,第18讲FOR语言里的一个问题

[复制链接]
发表于 2020-12-23 22:12:46 | 显示全部楼层 |阅读模式

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

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

x
在第18讲里 用for循环语言找出10以内的素数这个例子中,出现了一个问题求助。
当把程序里的else缩进到和 if in%x==0: 这句对应时候 运行结果出现了错误 显示如下
3 是一个素数
4 = 2 * 2
5 是一个素数
5 是一个素数
5 是一个素数
6 = 2 * 3
7 是一个素数
7 是一个素数
7 是一个素数
7 是一个素数
7 是一个素数
8 = 2 * 4
9 是一个素数
9 = 3 * 3


对比正确缩进结果有较大差异
2 是一个素数
3 是一个素数
4 = 2 * 2
5 是一个素数
6 = 2 * 3
7 是一个素数
8 = 2 * 4
9 = 3 * 3

现在能理解的应该是else缩进对应不同,导致break跳出的结果不同。
疑问一:为啥是从3开始打印 首先验证的2是否是因为没有对应的输出条件,所以没有输出。
疑问二:为啥5 和7会分别输出打印不同次数
疑问三:为啥9会出现素数验证失败

附注:错误代码如下
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,'是一个素数')

            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-24 01:09:46 | 显示全部楼层
本帖最后由 jackz007 于 2020-12-24 09:45 编辑

        判断不是素数可以在内层循环中,但是,判断是素数得在内循环结束以后,由于 n = 2 的时候根本就无法进入内层循环,而判定素数的信息只能在内层循环中打印,所以,2 是素数的信息根本就无法打印。
        代码修改很简单,只要把 else 的缩进位置调整一下,将其从属关系由 if 语句调整为 for 语句就可以了, 这样,就做到了确认素数要在内层循环结束以后下结论。
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 , '是一个素数')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 10:32:41 | 显示全部楼层
谢谢,疑问一大概明白了。
同时,错误代码情况下,出现的疑问二和疑问三能否也给解答一下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 01:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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