赞
踩
获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。
注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
输入格式:
输入一个整数或浮点数
输出格式:
单行输出,每个数字之间以逗号隔开,行末没有逗号
输入样例:
12
输出样例:
13,17,19,23,29
需要从三个方面来进行考虑:
- 输入数字的处理:
1、浮点数的判断:可以用type(num) == float或isinstance(num,float)判断输入是否为浮点数
2、浮点数的取整:这里不能直接用int(num),因为int(num)会直接将小数点后的数字舍去;而应使用int(num)+1,取大于该浮点数的整数(一开始不知道int(num)可以直接取整,想的是用前面课程里的round函数取尾后再int,而round(num,0)相当于四舍五入)
- 质数的生成:
1、定义一个函数判断某数m是否为质数:使用一个变量isPrime来标记是否为质数,初始值设为True。由于需要使用2-(m-1)之间的数来判断是否可以整除,因此这里可以从m<2、m=2、m>2三个方面来考虑。使用循环来判断m是否可以被除1和自身以外的数整除,如果可以,isPrime变为False,循环结束;否则isPrime始终为True。最后返回isPrime的值作为num是否为质数的结果。
2、得到从num开始的5个质数:以num为起始值,通过循环得到从num开始的5个质数,并将其通过方法append放到列表中。使用计数器counter来统计得到质数的个数,初始值设为0,每得到一个质数,counter加1,当counter=5时,循环结束。
- 质数的输出:
最终得到的质数存放在列表中,而题目要求输出五个数字,且以逗号分隔。可以有两个思路:
(1)每次得到一个质数之后就直接print,不将其放入列表储存,这样前4个数字print输出时使用end=",",第五个数字则可以直接print输出,使用if判断语句就可以实现
(2)如果将五个质数储存在列表中,则可以使用之前学习的字符串处理方法:str.join(iter)。由于该方法用于字符串,因此需要使用列表解析将元素从int变为str:strPrimes = [str(i) for i in primes],等同于如下的代码:
strPrimes = []
for i in primes:
strPrimes.append(str(i))
或者也可以在生成质数时直接以字符串的形式存放到列表中。
#判断一个数是否为质数 def isPrime(m): isPrime = True if m < 2: isPrime = False elif m > 2: for i in range(2,m): if m % i == 0: isPrime = False break return isPrime #读取输入 num = eval(input()) #浮点数处理 if isinstance(num, float): num = int(num) + 1 #质数生成 count = 0 primes = [] while count < 5: if isPrime(num): primes.append(str(num)) count += 1 num += 1 #输出结果 print(",".join(primes))
另外,关于质数判断方法还可以简化,只需判断能否被 2 ~ 根号m之间的每一个整数整除就可以了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。