当前位置: 代码迷 >> 综合 >> Python Day6 函数程序练习
  详细解决方案

Python Day6 函数程序练习

热度:16   发布时间:2023-11-30 11:24:09.0

1、编写程序,定义一个求阶乘的函数fact(n),并编写测试代码,要求输入整数n(n>=0)。请分别使用递归和非递归方式实现。

法①

n=eval(input('请输入整数n(n>=0):'))
def fact(n):if n==0 or n==1:return 1else:return n*fact(n-1)s=fact(n)
print(n,"!=",s,sep='')

法②

def fact(n):if n==0:f=1else:f=1for i in range(1,n+1):f*=ireturn f
n=int(input('请输入整数n(n>=0):'))
print(n,'!=',fact(n))

法③

n=eval(input('请输入整数n(n>=0):'))
s=1
for i in range(1,n+1):s*=i
print(str.format("{}!={}",n,s))

在这里插入图片描述

2、编写程序,定义一个求Fibonacci(斐波那契)数列的函数fib(n),并编写测试代码,输出前20项(每项宽度5个字符位置,右对齐),每行输出10个。

法①

def fib(n):fibs=[]for i in range(n):if i==0 or i==1: #数组第0项和第1项都是1fibs.append(1)else:fibs.append(fibs[i-2]+fibs[i-1])for i in range(n):if i==9: #第10项换行print("{:>5}".format(fibs[i]))else:print("{:>5}".format(fibs[i]),end='')
fib(20)

法②

def fib(n):a,b=0,1for i in range(n):a,b=b,a+bif i==9: #第10项换行print("{:>5}".format(a))else:print("{:>5}".format(a),end='')
fib(20)

法③

def fib(n):if n <= 1:return nelse:return (fib(n - 1) + fib(n - 2))m = 20
for i in range(1,m+1):if i==10:print("{:>5}".format(fib(i)))else:print("{:>5}".format(fib(i)),end='')

在这里插入图片描述

3、编写程序,利用可变参数定义一个求任意个数数值的最小值的函数 min_n(a, b, *c),并编写测试代码。例如,对于 “print(min_n(8, 2))”以及 “print(min_n(16, 1, 7, 4, 15))”的测试代码。

def min_n(a,b,*c):return min(a,b,*c)
print('最小值为',min_n(8,2))
print('最小值为',min_n(16,1,7,4,15))

在这里插入图片描述

4、编写程序,利用元组作为函数的返回值,求序列类型中的最大值、最小值和元素个数,并编写测试代码,假设测试数据分别为s1=[9,7,8,3,2,1,55,6]、s2=[“apple”,“pear”,“melon”,“kiwi”]和s3=“TheQuickBrownFox”。提示:函数形参为序列类型,返回值是形如“(最大值, 最小值, 元素个数)”的元组。

def f01(list):max_n=max(list)min_n=min(list)length=len(list)print('list=',list)return (max_n,min_n,length)
s1=[9,7,8,3,2,1,55,6]
s2=["apple","pear","melon","kiwi"]
s3="TheQuickBrownFox"
def print_s(list):print("最大值= {0[0]},最小值= {0[1]},元素个数= {0[2]}".format(f01(list)))
print_s(s1)
print_s(s2)
print_s(s3)

在这里插入图片描述

5、利用循环结构和函数定义,并使用turtle库绘制类似斯洛克形状图案。

import turtle as t
t.speed(0)
def drawCircle():t.pendown()t.circle(20) #半径为20t.penup()t.fd(40)
def drawRowCircle(n):for i in range(n,1,-1): #从第一排往下画圆 5432for j in range(i): #根据i的变化画i个圆drawCircle()t.fd(-i*40-20) #往左走,回到这一排的第一个圆的位置#这里减20是因为循环一次(画了一排圆之后)圆心停在半径20处#即此排中第一个圆到最后一个圆的总共长度是i个40+20,小海龟在最后一个圆的起点处t.right(90) #小海龟向右转90°t.fd(40) #向下走一个直径的距离t.left(90) #箭头向下向左即向右t.fd(40) drawCircle() #这里补充最后一个圆
drawRowCircle(5)
t.hideturtle()
t.done()

在这里插入图片描述