要求掌握函数编程:
实验内容:
(1)使用函数编程实现阶乘计算
(2)使用函数编程实现斐波那契数列计算
(3)命名函数的使用
(4)多类型参数函数
(5)求反素数
(6)井字棋游戏案例分析
函数的基本介绍:
在Python中,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。¹
Python函数分为四类:内置函数,标准库函数,第三方库函数和用户自定义函数。内置函数如`str()`、`list()`、`len()`等可以直接使用;标准库函数需要通过`import`语句导入库后使用;第三方库函数需要下载安装后通过`import`语句导入并使用;用户自定义函数则是用户根据自身需求定义的。
你可以通过定义一个函数来创建它,然后在你的代码中调用它。例如:
def my_function(param1, param2):
result = param1 + param2
return result
my_result = my_function(1, 2)
print(my_result)
这个例子中,我们定义了一个名为`my_function`的函数,它接受两个参数`param1`和`param2`,并返回它们的和。然后我们调用这个函数,并将结果存储在变量`my_result`中,最后打印出来。你可以根据需要定义和使用不同类型的函数。
(1)使用函数编程实现阶乘计算:
(1)编写程序,定义一个求阶乘的函数fact(n),并编写测试代码,要求输入整数n(n≥0)。
要求使用递归方式实现。
def fact(n):
if n==1:
return n
else:
return n*fact(n-1)
n=int(input())
print(fact(n))
(2)使用函数编程实现斐波那契数列计算
思考:关于遇见怎么使用递归。
上一个返回:n*fact(n-1)
这一个返回:fib(n-1)+fib(n-1)
为什么上一个使用n*fact(),因为递归要设置最小值,而我们的最小值是可以定位到0的,所以不能使用fact(n)。
(2)编写程序,定义一个求Fibonacci(斐波那契)数列的函数fib(n),并编写测试代码,
输出前20项(每项宽度5个字符位置,右对齐),每行输出10个。
def Fib(n):
if n<2:
return n
else:
return Fib(n-1)+Fib(n-2) ##要点就是从最小的一个值开始可以有值读取。
for i in range(20):
if i%10==0:
print()
print('{:>5}'.format(Fib(i)),end=' ')
//注意大于号是右对齐,小于号是左对齐
提升:关于每换十行打印一次换行,一开始的想法是每遍历10次打印一次,但做不出来,这种想法考虑的是遍历相当于加法一样,更好的方式是通过取余运算。
(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):
result=a if a
(4)多类型参数函数
(4)编写程序,利用元组作为函数的返回值,求序列类型中的最大值、最小值和元素个数,
并编写测试代码,
假设测试数据分别为s1=[9,7,8,3,1,55,6],s2=[“apple”,”pear”,”melon”,”kiwi”],s3=”TheQuickBrownFox”。
def tup(s):
MAX=max(s)
MIN=min(s)
num=len(s)
return (MAX,MIN,num)
s1=[9,7,8,3,1,55,6]
s2=["apple","pear","melon","kiwi"]
s3="TheQuickBrownFox"
print(tup(s1))
print(tup(s2))
print(tup(s3))
(5)求反素数
编写程序,求反素数(逆向拼写的素数)。反素数是指一个将其逆向拼写后也是一个素数的非回文数。
例如:
13和31都是素数,且13和31都不是回文数,所以,13和31是反素数。
输入一个正整数 n , 请在同一行输出从小到大排列的的前n个反素数,每个数字后面加一个空格。
def is_prime(n):
for i in range(2,n):
if n%i==0:
return False
return True
def non_prime(n):
string=str(n)
string=string[::-1]
if is_prime(int(string)):
if int(string)==n:
return False
else:
return True
n=int(input())
lit=[]
i=0
while len(lit)
这里要注意要求是打印输出n个数。
那肯定是要用到循环的,而我们的定义函数只判断是否是素数和非回文数。
如果要打印输出十个数,
一开始我的想法是使用while循环(这个想法很好,因为我们不知道打印前n个数到底需要遍历多少个数字)。但也卡在这里,没想到怎么定义它才只打印输出前n个项。
后来,通过使用len函数,并使用appen的函数,使用长度作为限定解决了问题。