Python中关于函数的经典问题

#####函数的经典问题######

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))

运行结果:

######################################

猜你喜欢

转载自blog.csdn.net/houzeyu666/article/details/81987132