鱼C论坛

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

[已解决]for循环语句嵌套函数的困惑

[复制链接]
发表于 2022-12-15 20:32:00 | 显示全部楼层 |阅读模式

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

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

x
各位大神:

我在看小甲鱼视频<了不起的分支和循环(V)>中讲解以下的代码:

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

我有以下问题:
     1)当外层for循环语句n进行第一层循环的时候,n=2,进入到内部for循环语句时,for x in range(2,2),此时x的取值为何?
     2)当外层for循环语句执行到第三遍时,即n=4时,内部for循环语句则为for x in range(2,4),x会遍历为2和3的两个值,当x为2时,满足if n % x == 0的要求,则会执行后续print(n, '=', x, '*', n // x)语句,但当x为3时,则不会满足if n % x == 0的要求,但为何没有跳出去执行下面else的语句部分?
    3)如果把该例子中的'n % x == 0:'中的n和x进行对调,即'x % n == 0:',该函数运行结果为何变为以下?
    2 是一个素数
    3 是一个素数
    4 是一个素数
    5 是一个素数
    6 是一个素数
    7 是一个素数
    8 是一个素数
    9 是一个素数
pic.jpg
最佳答案
2022-12-15 20:58:53
1、range(start, stop[, step])中:stop 参数指定的数值不包含在内
参考文档:https://fishc.com.cn/forum.php?m ... amp;highlight=range
for i in range(2,2):
    print(i)

    
#打印为空
这里用到了for...else...语句的组合,for x in range(2, 2):的条件语句不成立,就执行else语句
2、注意else语句的缩进,这里的else并不是跟if组合使用的,是内层for循环和else一起组合的,既for...else...语句,而且当x为2时,满足if n % x == 0的要求,则会执行后续break语句,内层循环的break也会将内层循环打断,所以根本不会执行x=3的情况
3、参考文章:https://fishc.com.cn/forum.php?mod=viewthread&tid=126956&highlight=for%2Belse
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-15 20:46:04 | 显示全部楼层
原程序是判断n能否整除2~n-1的数整除,如果都不能整除,就是素数,如果有一个可以整除,就是合数。
而你改完代码后,程序就变成了判断2~n-1的数能否整除n,这明显是不可能的,因为2~n-1的数均比n小,不可能整除n,所以就执行了else语句,打印了"n 是一个素数"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-15 20:58:53 | 显示全部楼层    本楼为最佳答案   
1、range(start, stop[, step])中:stop 参数指定的数值不包含在内
参考文档:https://fishc.com.cn/forum.php?m ... amp;highlight=range
for i in range(2,2):
    print(i)

    
#打印为空
这里用到了for...else...语句的组合,for x in range(2, 2):的条件语句不成立,就执行else语句
2、注意else语句的缩进,这里的else并不是跟if组合使用的,是内层for循环和else一起组合的,既for...else...语句,而且当x为2时,满足if n % x == 0的要求,则会执行后续break语句,内层循环的break也会将内层循环打断,所以根本不会执行x=3的情况
3、参考文章:https://fishc.com.cn/forum.php?mod=viewthread&tid=126956&highlight=for%2Belse
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 20:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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