【Python函数和代码复用】

函数的概念

  • 函数是一段具有特定功能的、可重用的语句块。
  • 用函数名来表示,并通过函数名进行完成功能调用。
  • 需要执行的地方调用,不用再重复编写这些语句。

使用函数的好处

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可能是浮点数,应对输入取整数;最后一个输出后不用逗号。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

 ‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬输入输出示例

输入输出
示例 11213,17,19,23,29
示例 299101,103,107,109,113
示例 3113.5127,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])

输出结果:

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W_chuanqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值