1、编程需求
阿萌要开发一个程序,该程序可以判断一个自然数n是质数还是合数。

例如学生输入自然数17,程序判断17为质数,程序输出“15:质数”。
2、认识质数和合数
要确定一个自然数是质数还是合数,需要先找出该自然数有多少个因数。因为该自然数是质数还是合数,与这个自然数有多少个因数有关。

按这些数因数个数的多少,可以分为三种情况:

只有1和它本身两个因数的为质数,质数也称为素数。有两个以上因数的称为合数。自然数1既不是质数,也不是合数。
3、判断方法
判断一个自然数是质数还是和数,可以先找出该自然数的所有因数。
如果该自然数只有1个因数,那么这个自然数既不是质数,也不是合数;如果该自然数有两个因数,那么这个自然数是质数;如果该自然数有2个以上的因数,那么这个自然数是合数。

4、程序流程图

(1)程序等待学生输入,并输出提示信息“请输入一个自然数n,或者输入quit退出程序”,学生输入的内容赋值给num;
(2)判断num是否是自然数,如果是自然数转步骤(4),如果不是自然数转步骤(3);
(3)判断num是否等于quit,如果是quit,退出程序,否则转步骤(1);
(4)调用factors函数获取num的因数个数;
(5)输出判断信息,转步骤(1)。

(1) 函数传入的参数为自然数n;
(2) 创建空list列表,用于存储自然数n的所有因数;
(3) 使用for循环找出自然数n的因数,循序范围为1~n,在循环体内,如果计数变量是自然数n的因数,就添加到list;
(4) 最后函数返回list的长度。

(1) 子流程从主流程中传入变量count,count是自然数n因数的个数;
(2) 判断count是否等于1,如果等于1,说明该自然数是1,1既不是质数,也不是合数,子流程结束;
(3) 再判断count是否等于2,如果等于2,说明该自然数是质数,子流程结束;
(4) 最后判断count是否大于2,如果大于2,说明该自然数是合数,子流程结束。
5、程序代码及解读
程序代码如下:
'''
程序文件:main.py
功能描述:判断自然数n是质数还是合数
代码编写时间:2020/04/24
作者:编程训练营
'''
# 定义factors函数
# 功能:求出自然数n因数的个数
def factors(n):
# 创建一个空的list
num_list = []
for i in range(1,n+1):
# 若n被i整除,i是n的因数
if n % i == 0:
# i添加到list
num_list.append(i)
# 返回num_list元素个数
return len(num_list)
# 程序入口
if __name__ == '__main__':
while(True):
# 提示学生输入一个自然数
num = input("请输入一个自然数,输入quit可退出程序:")
# 判断num是否全部是数字
if num.isdigit():
# 调用factors函数获取num因数个数
count = factors(int(num))
# 使用多重条件判断
if count == 1:
print("%s:既不是质数也不是合数" % (num))
elif count == 2:
print("%s:质数" % (num))
elif count > 2:
print("%s:合数" % (num))
# 判断num是否等于quit,如果是quit跳出循环
elif num == "quit":
break;
# 输出错误信息提示
else:
print("输入错误,请输入一个自然数或者输入quit退出程序")代码解读
factors函数用于求出自然数n因数的个数,代码内容在《找出自然数n的所有因数》一文中已经介绍过了,这里就不再介绍了。
程序的主体代码建立一个while循环,让程序一直处于运行状态。在while循环体内,提示学生输入一个自然数,并赋值给num,然后调用字符串对象isdigit方法判断num是否全部是数字字符。
如果num不全部是数字字符,再判断num是否等于quit,如果num是quit,调用break语句跳出循环,程序结束。
如果num全部是数字字符,调用factors函数获取num因数的个数,函数返回值赋值给count,然后程序使用多重条件结构来判断count的值,count的值分为下面三种情况:
(1)如果count的值为1,说明num是自然数1,自然数1既不是质数,也不是合数;
(2)如果count的值为2,说明num只有两个因数,只有两个因数的数是质数;
(3)如果count的值大于2,说明num至少有两个以上的因数,num是合数。