一、问题:Python判断素数(质数)
获得输入正整数 N,判断 N 是否为质数,如果是则输出 True,否则输出 False。不考虑输入异常。
我的答案:
#质数定义为在大于1的自然数
N = eval(input())
flag = True
if N > 1:
for i in range(2,N):
if N%i == 0:
print('False')
break
else:
print('True')
else:
print('False')
#非质数:能被range(2,N)中任意i整除即可
在我的答案中,用到了Python循环结构、循环控制的知识。此外,还涉及到else循环扩展模式。
二、知识回顾
1、Python的2种循环结构
遍历循环:环使用保留字for依次提取遍历结构各元素进行处理。
无限循环:使用保留字while根据判断条件执行程序。
2、Python的2种循环控制
break:如果有2层或多层循环,break退出最内层循环。
continue:用来结束当前当次循环,即跳出循环体中下 面尚未执行的语句,但不跳出当前循环。
3、遍历循环和无限循环的保留字else扩展模式
当for/while循环正常执行之后,程序会继续执行else语句中内容。else中可放置判断循环执行情况的语句。
for 循环遍历 in 循环结构/while 条件:
<语句块1>
else:
<语句块2>
以上引自《 Python 语言程序设计》第4章“程序的控制结构”部分。
三、练习巩固
在解决python判断素数的问题前,我曾遇到了如下问题,与判断素数问题有异曲同工之妙,作为循环问题的练习补充很合适:
#小问题:打印出给定数组中第一个大于等于7的数字 如果没有打印一条提示消息
以下记录了自己的几种解决方法,当时还不知else循环扩展模式:
#方法1 缺点是太复杂
a = [1,2,3,4,5,9,8,3,7]
if max(a)<7:
print('数组中没有大于等于7的数字!')
else:
for i in a:
if i<7:
continue
else:
print(i)
break
#方法2 利用range 函数
a = [1,2,3,4,5,9,8,3,7]
for i in range(len(a)):
if a[i] >= 7:
print(a[i])
break
elif i == len(a-1):#注意这里需要减1
print("数组中没有大于等于7的数字!")
#方法3
a = [1,2,3,4,5,9,8,3,7]
flag = True
for i in a:
#先执行循环内的代码
while (i >= 7)and flag:
print(i)
flag = False
break
if flag:
print('数组中没有大于等于7的数字!')
#方法4
a = [1,2,3,4,5,9,8,3,7]
flag = True
for i in a:
#先执行循环内的代码
if (i >= 7):#and flag:
print(i)
flag = False
break
if flag:
print('数组中没有大于等于7的数字!')
所以,当使用了else循环扩展模式,小问题有了更简洁的解答:
#方法5 else扩展模式(方法2改进版)
a = [1,2,3,4,5]
for i in range(len(a)):
if a[i]>= 7:
print(a[i])
break
else:
print('数组中没有大于等于7的数字!')
至此,对python循环结构的知识算是有了初步的掌握。