#####函数的经典问题######
1. 编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数;
def isPrimer(num):
for i in range(2, num):
if num%i == 0:
return False
return True
num = int(input('请输入一个数字:'))
print(isPrimer(num))
运行结果如下:
2. 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编程序计算共有多少种不同的走法?需求: 编制一个返回值为整型的函数Fib(n),用于获取n阶台阶的走法;
提示:(fib数列)
设n阶台阶的走法数为f(n)。如果只有1个台阶,走法有1种(一步上1个台阶),即f(1)=1;如果有2个台阶,走法有2种(一种是上1阶,再上1阶,另一种是一步上2阶),即f(2)=2;当有n个台阶(n>3)时,我们缩小问题规模,可以这样想:最后是一步上1个台阶的话,之前上了n-1个台阶,走法为f(n-1)种,而最后是一步上2个台阶的话,之前上了n-2个台阶,走法为f(n-2)种,故而f(n)=f(n-1)+f(n-2)。
def f(n):
count = 0
if n == 1:
count += 1
elif n == 2:
count = count + 2
else:
count = f(n-1) + f(n-2)
num = count
return num
n = int(input('输入一个正整数n:'))
print(f(n))
运行结果:
3. 算法案例的拓展:
1). 求满足条件n=a!+b!+c!的所有三位数n并输出,要求用自定义函数实现求阶乘。
def jiecheng(num):
x = 1
for i in range(1, num + 1):
x = x * i
return x
def fun(num):
li = [jiecheng(int(i)) for i in str(num)]
res = sum(li)
if res == num:
return True
print([i for i in range(100,1000) if fun(i)])
2). 输出1000以内的所有完全数;
def fun(num):
list = [i for i in range(1, num) if num % i == 0]
res = sum(list)
if res == num:
return True
print([i for i in range(1, 1000) if fun(i)])
3). 输出1000以内的所有素数;
def isPrimer(num):
for i in range(2, num):
if num%i == 0:
return False
return True
print([ i for i in range(2,1000) if isPrimer(i)])
4). 输出10000以内的所有回文数;
def fun(num):
if str(num)==str(num)[::-1]:
return True
print([i for i in range(1,10000) if fun(i)])
5). 输出10000以内的所有回文素数(提醒:某数是素数后再判断是否也是回文数。);
def fun(num):
if str(num)==str(num)[::-1]:
return True
def isPrimer(num):
for i in range(2, num):
if num%i == 0:
return False
return True
print([ i for i in range(2,10000) if isPrimer(i) and fun(i)])
** 总结:
此类题目的共有特征是,需要考察一定范围内的数字符合某种特定的条件,从大的框架讲,就需要逐个考察相应范围内的每一个数字。因此,程的顶层结构是:
"""
for i in range(下限, 上限+1):
为构造条件进行相关的计算;
if(条件成立) 输出符合要求的结果
4. 选人:
1班和2班两个班,1班同学的学号为1-41,2班同学的学号为42-84,现在每个班要抽签确定5名同学去参加组织的Linux挑战大赛,请编程完成这个“抽签”的工作。
编制一个返回值为列表的函数getId(start=1, end=40, count=5),用于获取参加比赛的学生学号;
import random
def getId(start=1, end=40, count=5):
list = [random.randint(start, end + 1) for i in range(count)]
return list
print(getId(1, 41, 5) + getId(42, 84, 5))
运行结果: