函数练习

1. 编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数;

代码:

def isPrimer(n):
    for i in range(2, n):
        if not n % i:
            return False
            break
    else:
        return True

print(isPrimer(int(input())))

运行结果:

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 fib(n):
    if n == 1:
        all = 1
    elif n ==2:
        all = 2
    else:
        all = fib(n-1)+fib(n-2)
    return all

print(fib(int(input('台阶数:'))))

运行结果:

3. 算法案例的拓展:
    
    1). 求满足条件n=a!+b!+c!的所有三位数n并输出,要求用自定义函数实现求阶乘。

代码:

def factorial(a):
    if a == 0:
        return 0
    fac = 1
    for i in range(1, a + 1):
        fac *= i
    return fac


def isComp(n):
    sum = 0
    for i in str(n):
        sum += factorial(int(i))
    if sum == n:
        return True
    else:
        return False

for n in range(100, 1000):
    if isComp(n):
        print(n)

运行结果:

    2). 输出1000以内的所有完全数;

代码:

def isPerfect(m):                              
    li = [s for s in range(1, m) if not m % s] 
    if m == sum(li):                           
        return True                            
    else:                                      
        return False                           

for n in range(1, 1001):           
    if isPerfect(n):               
        print(n)                   

运行结果:

    3). 输出1000以内的所有素数;

代码:

def isPrime(p):                               
    for i in range(2, p):                     
        if not p % i:                         
            return False                      
    else:                                     
        return True                           
                                              
for p in range(1,1
    if isPrime(p):
        print(p)  

运行结果:

    4). 输出10000以内的所有回文数;

代码:

def isPalindrome(h):                     
    if str(h) == str(h)[::-1]:           
        return True                      
    else:                                
        return False                     
                                         
for h in range(1, 10001):              
    if isPalindrome(h):                
        print(h)                       

运行结果:

    5). 输出输出10000以内的所有回文素数(提醒:某数是素数后再判断是否也是回文数。);

代码:

def isPrime(p):                                 
    for i in range(2, p):                       
        if not p % i:                           
            return False                        
    else:                                       
        return True                             
                                                
                                                
def isPalindrome(h):                            
    if str(h) == str(h)[::-1]:                  
        return True                             
    else:                                       
        return False                            

for i in range(1,10001):                                     
    if isPalindrome(i) and isPrime(i):                       
        print(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):
    li = [random.randint(start, end) for i in range(count)]
    return li

print('一斑:', getId(1, 41, 5))
print('二班:', getId(42, 84, 5))

运行结果:

打地鼠游戏:

代码:

import random

def beat():
    for i in range(5):
        n = int(input('洞口:'))
        mouse = random.choice([1,2,3,4,5])
        if n == mouse:
            print('you got it')
            break
        else:
            print('try again')

beat()

运行结果:

 

打字游戏:

代码:

def per(orginStr, userStr):
    correct = 0
    if len(orginStr) < len(userStr):
        return '输入超出范围。'

    else:
        for i in zip(orginStr, userStr):
            if i[0] == i[1]:
                correct += 1
        per = 100*(correct/len(orginStr))
        return '%.2f%%' %per

print(per('hello', 'helle'))

运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值