for循环语句嵌套函数的困惑
各位大神:我在看小甲鱼视频<了不起的分支和循环(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 是一个素数
原程序是判断n能否整除2~n-1的数整除,如果都不能整除,就是素数,如果有一个可以整除,就是合数。
而你改完代码后,程序就变成了判断2~n-1的数能否整除n,这明显是不可能的,因为2~n-1的数均比n小,不可能整除n,所以就执行了else语句,打印了"n 是一个素数"。 1、range(start, stop[, step])中:stop 参数指定的数值不包含在内
参考文档:https://fishc.com.cn/forum.php?mod=viewthread&tid=163478&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
页:
[1]