函数的概念
- 函数是一段具有特定功能的、可重用的语句块。
- 用函数名来表示,并通过函数名进行完成功能调用。
- 需要执行的地方调用,不用再重复编写这些语句。
使用函数的好处
1.程序模块化
当一个程序规模较大,(长度在百行以上),如果整个一体下来,既难以编写,读起来又费劲,程序的可读性非常糟糕。还有,复杂的程序经常由多个人共同编写开发 解决这一问题的最好方法是将一个程序分割成短小的程序块,每一段程序完成一个小的功能。被称为“模块化设计”。
2.代码复用
编写代码定义成函数,其他地方只要输入参数即可调用函数,从而避免相同功能代码在被调用处重复编写。 代码复用还有一个好处,当随着时间环境的变化,一个功能需要更新时,所有被调用处的功能都被同步更新。
函数语法格式:
def <函数名>(<参数列表>):
<函数体>
return <返回值列表>
- 函数名:给函数起的名字(能描述其功能),其他程序通过函数名调用它
- 函数体:这个功能块的具体执行内容,一段代码
- 参数:这个功能块处理的数据对象(相当于工厂的原材料),根据需要可以有多个,可以没有。调用函数时要一致
- 返回值:这个功能块执行以后,返回给调用程序的结果数据,根据需要可以没有,没有返回值就不用写return语句
函数应用实例
1.打印圣诞树
# 打印圣诞树
def triangle(n):#打印三角形
for i in range(n):
print(' '*(n-1-i), end="")
print('*'*(2*i+1))
def square():#打印正方形
for i in range(4):
print(' '*3+'*' * 3)
triangle(5)
triangle(5)
triangle(5)
square()
2.求阶乘函数
求以下公式的值:p=m! / ( n! (m-n)! )
自己定义求阶乘的函数fac,然后在主程序中通过调用这个函数,求出公式的值
提示:这个函数要有返回值
def fac(n): # 定义阶乘函数
s = 1
for i in range(1, n+1):
s *= i
return s
m = eval(input())
n = eval(input())
p = fac(m)/(fac(n)*fac(m-n))
print("{}".format(p))
3.水仙花数
自己定义一个判断水仙花数的函数isNar, 然后在主程序中通过调用这个函数,输出所有的水仙花数。提示:这个函数的返回值可以设置为逻辑值True、False,也可以设置为字符串类型的“Yes”、“NO”,但注意函数和主程序数据传递保持一致
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
import math
def isNar(n):#判断是否为水仙花数
a = n//100
b = n//10 % 10
c = n % 10
if math.pow(a, 3)+math.pow(b, 3)+math.pow(c, 3) == n:
return True
else:
return False
num = []
for i in range(100, 1000):
if isNar(i):
num.append(i)
print(num)
4.判断闰年
自己定义一个判断闰年的函数isLeap, 然后在主程序编写上次的作业题:输入年、月、日,输出是这一年的第几天,要调用isLeap 。 提示:这个函数的返回值可以设置为逻辑值True、False,也可以设置为字符串类型的“Yes”、“NO”,但注意函数和主程序数据传递保持一致
判断任意年份是否为闰年,需要满足以下条件中的任意一个:
① 该年份能被 4 整除同时不能被 100 整除;
② 该年份能被400整除。
def isLeap(x): # 判断闰年
if x % 4 == 0 and x % 100 != 0 or x % 400 == 0:
return True
else:
return False
a = eval(input("输入年份:"))
b = eval(input("输入月份:"))
c = eval(input("输入天数"))
if b == 1:
print("这是一年的第{}天".format(c))
else:
if isLeap(a):
i = 29
else:
i = 28
day = [31, i, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
sum = sum(day[:b-1])+c
print("这是一年的第{}天".format(sum))
5.判断素数
自己定义一个判断素数的函数isPrime, 然后在主程序调用这个函数,输出小于100的所有素数。 提示:这个函数的返回值可以设置为逻辑值True、False,也可以设置为字符串类型的“Yes”、“NO”,但注意函数和主程序数据传递保持一致
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
import math
def isprime(n): # 判断是否为素数
if n == 1:
return False
elif n == 2:
return True
else:
for i in range(2, int(math.sqrt(n)+1)): # 缩小遍历范围
if n % i == 0:
return False
return True
for i in range(1, 100):
if isprime(i):
print(i, end=" ")
6.累加求和
求以下公式的值: 1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+……+n) 定义一个函数,函数名自取,它的功能是求 前x项自然数的和(1+2+……+x) ,函数返回值为求和的结果。在主程序中,通过调用函数,求以下公式的值:1+(1+2)+(1+2+3)+……+(1+2+3+……+n),n需要输入
def sum(n):
s = 0
for i in range(1, n+1):
s += i
return s
n = eval(input())
x = 0
for i in range(1, n):
x += i/sum(i)
print(x)
7.连续质数计算
描述
补充编程模板中代码,完成如下功能:
获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。
注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
输入输出示例
输入 | 输出 | |
示例 1 | 12 | 13,17,19,23,29 |
示例 2 | 99 | 101,103,107,109,113 |
示例 3 | 113.5 | 127,131,137,139,149 |
代码
import math
def prime(m):
if m == 1:
return False
elif m == 2:
return True
else:
i = 2
while i < m:
if m % i == 0:
return False
i += 1
else:
return True
n = eval(input())
n = math.ceil(n) #向上取整
s = ''
flag = 0
while flag < 5:
if prime(n):
s += str(n)+','
flag += 1
n += 1
print(s[:-1])
输出结果: