第5章 模块与函数——笔记八

#第5章 模块与函数
#实验5.1 函数实验
'''利用用户定义函数,按照要求,完成如下任务。
(1)分别利用一般函数和递归函数两种方法,
设计n的阶乘的函数fa(n),计算并输出1!+2!+…+n!。'''
def fa1(n):#一般函数
    sum=0
    i=n
    k=1
    while i>=1:
        j=i
        while j>1:
            k=j*(j-1)*k
            j=j-2
        sum=sum+k
        k=1
        i=i-1
    return sum
#递归函数
def fa2(n):
    if(n==1):
        return 1
    else:
        return fa2(n-1)*n
def fa3(n):
    if(n==1):
        return 1
    else:
        return fa3(n-1)+fa2(n)
n=eval(input('请输入整数n:'))
print('sum1=',fa1(n),sep='')
print('sum2=',fa3(n),sep='')

'''(2)分别利用一般函数和匿名函数两种方法,
定义四叶玫瑰数f44,计算并输出所有四叶玫瑰数。'''
#一般函数
def f144():
    n=1000
    while n<10000:
        a=int(n/1000)
        b=int(n/100%10)
        c=int(n/10%10)
        d=int(n%10)
        print(a,b,c,d)
        #也可使用list获取位数上的数字
        #n=1177,Python直接使用a=n/1000的结果是a=1.177,所以需要做强制转换
        if pow(a,4)+pow(b,4)+pow(c,4)+pow(d,4)==n:
            print(n)
        n=n+1
f144()
#匿名函数
f44=lambda a,b,c,d:pow(a,4)+pow(b,4)+pow(c,4)+pow(d,4)
for n in range(1000,10000):
    s=list(str(n))
    a=int(s[0])
    b=int(s[1])
    c=int(s[2])
    d=int(s[3])
    if n==f44(a,b,c,d):
       print(n)
'''(3)角谷定理。输入一个自然数n,如果n为偶数,则
n除以2;如果n为奇数,则n乘以3加1;重复上述操作,
直到n=1结束。利用递归函数,计算并输出经过多少次
可以达到n=1.'''

count=0               
def testJG(k):          
    global count
    if k==1:
        return
    else:         
        count=count+1 
        if k%2==0:    
            testJG(int(k/2))   
        if k%2==1:    
            testJG(int(k*3+1))
n=eval(input('请输入自然数n:'))
testJG(n)
print(n,'经过',count,'次可以达到1',sep='')

'''(4)四则运算测试系统atest.py
设计四个函数:加函数plus(x,y)、减函数minu(x,y)、
乘函数prod(x,y)和除函数divi(x,y),
实现两个数据加减乘除运算的测试,要求如下:
①从键盘输入任意两个数据x、y,实现四则运算的测试
②如果回答正确,输出“回答正确,你好聪明!”;
如果回答错误,输出“回答错误,继续加油!”并
输出正确答案
③可以选择(y)继续测试,或者(n)退出测试'''
def plus(x,y):
    right=x+y
    print(x,'+',y,'=',sep='',end='')
    inanswer=eval(input())
    if right==inanswer:
        print('回答正确,你好聪明!')
    else:
        print('回答错误,继续加油!正确答案是:',right)
def minu(x,y):
    right=x-y
    print(x,'-',y,'=',sep='',end='')
    inanswer=eval(input())
    if right==inanswer:
        print('回答正确,你好聪明!')
    else:
        print('回答错误,继续加油!正确答案是:',right)
def prod(x,y):
    right=x*y
    print(x,'*',y,'=',sep='',end='')
    inanswer=eval(input())
    if right==inanswer:
        print('回答正确,你好聪明!')
    else:
        print('回答错误,继续加油!正确答案是:',right)
def divi(x,y):
    if y==0:
        print('除数不能为0!')
        return
    #此处可进行异常处理
    right=x*1.0/y
    print(x,'/',y,'=',sep='',end='')
    inanswer=eval(input())
    if right==inanswer:
        print('回答正确,你好聪明!')
    else:
        print('回答错误,继续加油!正确答案是:',right)
choice='y'
while choice=='y':
    x,y=eval(input('请输入x,y:'))
    plus(x,y)
    minu(x,y)
    prod(x,y)
    divi(x,y)
    choice=input('是否继续进行测试?(y/n)')

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值