前言
这篇文章是学习python过程中的一些代码摘录,源文件来自李笑来github《自学是门手艺》
一、质数是什么?
质数指的是大于1且只可以被1和它自身整除的自然数,又叫做素数。
二、程序代码
1.常规方法
代码如下(示例):
#程序1
for n in range(2,100):
if n == 2:
print(n)
continue
for i in range(2,n):
if n % i == 0:
break
else:
print(n)
执行结果如下图:
顺便贴一个刚刚写的错误的程序:
#程序2
for n in range(2,100):
if n == 2:
print(n)
continue
for i in range(2,n):
if n % i == 0:
break
else:
print(n)
执行结果如图:
思考一下:为何else要这样对齐?这地方其实用到了一个不常用的语法 for…else, 当 for 所有的语句代码块正常运行完,才会运行 else 语句。程序2的实际输出会出现多次重复打印质数的情况,例如当满足 n = 5 n = 5 n=5 时, i i i 的取值可以为2,3,4 均会执行打印5的操作。
Loop statements may have an else clause; it is executed when the loop terminates through exhaustion of the list (with for) or when the condition becomes false (with while), but not when the loop is terminated by a break statement. This is exemplified by the following loop, which searches for prime numbers:
for n in range(2, 10):
… for x in range(2, n):
… if n % x == 0:
… print(n, ‘equals’, x, ‘*’, n//x)
… break
… else:
… # loop fell through without finding a factor
… print(n, ‘is a prime number’)
…
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
2.改进版
不需要除到最后一个数,只需要到 n \sqrt{n} n即可
for n in range(2,100):
if n == 2:
print(n)
continue
for i in range(2,int(i ** 0.5) +1):
if n % i == 0:
break
else:
print(n)
range(a,b)范围包括a,但不包括b,因此 int(i ** 0.5) 加1
总结
以上就是第一篇的内容,本来想寻个简单的,没想到撞上了 for…else。简言之,就是执行完for中的内容,再执行else。道阻且长,继续努力。