Python 实验六 函数的设计

news2024/11/24 1:53:00

1.编写两个函数分别按单利和复利计算利息,根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1000元在银行存3年,在年利率是6%的情况下,单利和复利分别获得的本息和和利息。单利计算指只有本金计算利息。复利计算是指不仅本金计算利息,利息也计算利息,也就是通常所说的“利滚利”。如这题按单利计算本息和1000+1000×6%×3=1180元,其中利息为180元;按复利计算本息和1000×(1+6%)3=1191.016元,其中利息为191.016元。

money = float(input("请输入存款本金为:"))
year = int(input("请输入存款年份为:"))
rate = float(input("请输入年利率为:"))
 
def simple():
    interest = money * rate * year
    total = money + interest
    print("单利计算利息为:", interest, "单利计算本息和为:", total)
 
def compound():
    total = money * (1 + rate) ** year
    interest = total - money
    print("复利计算利息为:", "%.3f"%interest, "复利计算本息和为:", total)
 
simple()
compound()

在这里插入图片描述
2.编写函数,判断一个数是否为素数。调用该函数判断从键盘中输入的数是否为素数。素数也称质数,是指只能被1和它本身整除的数。

def function(x):
    for i in range(2, x):
        if x % i == 0:
            print(x, "不是素数")
            break
    else:
        print(x, "是素数")
 
n = int(input("请输入一个整数:"))
function(n)

在这里插入图片描述
3.编写函数,求出一个数除了1和自身以外的因子。从键盘输入一个数,调用该函数输出除了1和它自身以外的所有因子。

def function(x):
    if x > 1:
        for i in range(2, x):
            if x % i == 0:
                print(i,end=" ")
                      
n = int(input("请输入一个整数:"))
print("该数除了1和自身以外的因子为:")
function(n)

在这里插入图片描述
4.编写函数,判断一个数是否为水仙花数。调用该函数打印出1000以内的所有水仙花数。水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:13+53+33=153,则153是水仙花数。水仙花数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数。

def function(x):
    a = x // 100
    b = (x - 100 * a) // 10
    c = x - 100 * a - 10 * b
    if a ** 3 + b ** 3 + c ** 3 == x:
        print(x, end=" ")
 
print("1000以内的水仙花数为:")
for i in range(100, 1000):
    function(i)

在这里插入图片描述
5.编写函数求斐波拉契数列的前20项。斐波拉契数列的第1项和第2项分别是0和1,从第3项开始,每一项都是前两项之和。如:0,1,1,2,3,5,8,13,21…。试用递归函数实现。

def function(x):
    if x == 1:
        s = 0
    elif x == 2:
        s = 1
    else:
        s = function(x - 1) + function(x - 2)
    return s
 
for i in range(1, 21):
    print("斐波拉契数列的第", str(i), "项为:", function(i))

在这里插入图片描述
【实验总结】
1.函数的定义
函数是为实现一个特定功能而组合在一起的语句集,可以用来定义可重用代码、组织和简化代码。
函数定义格式如下:
def 函数名(形式参数):
函数体
函数通过def关键字定义,包括函数名称、形式参数、函数体。
函数名是标识符,命名必须符合Python标识符的规定;形式参数,简称为形参,写在一对圆括号里面,形参是可选的,即函数可以包含参数,也可以不包含参数,多个形参之间用逗号隔开;该行以冒号结束。
函数体是语句序列,左端必须缩进一些空格。
2.函数的调用
函数的定义是通过参数和函数体决定函数能做什么,并没有被执行。
而函数一旦被定义,就可以在程序的任何地方被调用。
当调用一个函数时,程序控制权就会转移到被调用的函数上,真正执行该函数;
执行完函数后,被调用的函数就会将程序控制权交还给调用者。
3.形参与实参
在函数定义中,函数名后面括号中列出的参数称为形式参数,简称形参。
如果形参的个数超过1个,各参数之间用逗号隔开。
在定义函数时,函数的形参不代表任何具体的值,只有在函数调用时,才会有具体的值赋给形参。
调用函数时传入的参数称为实际参数,简称实参。
4.函数的返回
函数的执行结果通过返回语句return返回给调用者。
函数体中不一定有表示返回的return语句。
函数调用时的参数传递实现了从函数外部向函数内部输入数据,而函数的返回则解决了函数向外部输出信息的问题。如果一个函数的定义中没有return语句,系统将自动在函数体的末尾插入return None语句。
5.位置参数
当调用函数时,需要将实参传递给形参。
参数传递时有两种方式:位置参数和关键参数。位置参数是指按照参数的位置来传递,关键参数是指按照参数赋值的形式来传递。
当使用位置参数时,实参和形参在顺序、个数和类型上必须一一匹配。前面示例中,调用带参数的函数时均使用位置参数的方式。
6. 默认参数与关键参数
函数的形参可以设置默认值。这种形参通常称为默认参数。Python允许定义带默认参数的函数,如果在调用函数时不为这些参数提供值,这些参数就使用默认值;如果在调用时有实参,则将实参的值传递给形参,形参定义的默认值将被忽略。具有默认参数值的函数定义格式如下:

def 函数名(非默认参数, 形参名=默认值, ……):
函数体
函数定义时,形式参数中非默认参数与默认参数可以并存,但非默认参数之前不能有默认参数。
7.可变长度参数
在前面的函数介绍中,我们知道一个形参只能接收一个实参的值。
其实在Python中,函数可以接收不定个数的参数,即用户可以给函数提供可变长度的参数。这可以通过在形式参数前面使用标识符*来实现。
Python的函数形参中还提供了一种参数名前面加标识符**的方式,用来引用一个字典。
函数调用者须以关键参数的形式为其赋值,形式参数得到一个以关键参数中变量名为key,右边表达式值为value的字典。
**为前缀的可变长度参数、以*为前缀的可变长度参数、普通参数在函数定义中可以混合使用。这时,普通参数放在最前面,其次是以*为前缀的可变长度参数,最后是以**为前缀的可变长度参数。
8. 序列和字典作为参数
如果使用字典作为实参,则函数定义中的形参也是字典;
如果使用序列作为实参,则要满足下列两个条件之一:
函数中形参也是序列;
如果函数中形参是n个单变量,则在实参的序列变量名前加*,要求实参序列中的元素个数与单变量形参个数相同;如果实参中普通变量与序列变量混用,则以*为前缀的序列变量放置在实参的最后。
9. 变量作用域
变量的作用域是指一个变量能够作用的范围,也就是在多大范围内能够被解释器识别。
根据变量的作用域,变量可分为全局变量和局部变量。
声明在函数外部的变量,被称为全局变量,作用范围是所在程序文件内从定义开始至程序结束,包括变量定义后所调用的函数内部。
一般声明在函数内部的变量是局部变量,该变量只能在该函数内部使用,超出范围就不能使用。
也可以通过global关键词将函数内部的变量申明为全局变量,该变量可以在主程序中调用该函数后的剩余语句中使用。
10. 生成器函数
生成器其实是一种特殊的迭代器。这种迭代器更加优雅,不需要写__iter__()和__next__()方法,只需要在函数中使用一个yiled关键字以惰性方式逐一返回元素。
生成器一定是迭代器(反之不成立)。
Python 中使用了yield的函数返回生成器对象,此函数称为生成器函数,只能用于迭代操作。在调用该函数的过程中,每次遇到yield语句时,函数会暂停执行,并保存当前所有的运行状态信息,返回yield后面的值,并在下一次执行next()方法时从当前位置继续运行。生成器函数返回的是一个生成器对象。
11. lambda函数
lambda函数是一个匿名函数,有时也被称为lambda表达式,比def格式的函数定义简单很多。Lambda函数可以接收任意多个参数,但只返回一个表达式的值。lambda中不能包含多个表达式。
lambda函数的定义格式为:lambda 形式参数 : 表达式。其中形式参数可以有多个,它们之间用逗号隔开。表达式只有一个。返回表达式的计算结果。
以下例子中表达式左边的变量相当于给lambda函数定义了一个函数名。可以将此变量名作为函数名来调用该lambda函数。
12. 递归
函数内部可以调用其他函数。如果一个函数在内部直接或间接地调用自己本身,这是一种递归的方法。递归是一种非常实用的程序设计技术。许多问题具有递归的特性,在某些情况下,用其他方法很难解决的问题,利用递归可以轻松解决。
一个递归调用当达到终止条件时,就将结果返回给调用者。然后调用者进行计算并将结果返回给它自己的调用者。这个过程持续进行,直到结果被传回原始的调用者为止。
因此在编写递归函数的时候必须满足以下两点:
有明确的递归终止条件及终止时的值;
能用递归形式表示,并且向终止条件的方向发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【问题解决】Mybatis Plus Generator(新代码生成器)+达梦数据库,创建数据库连接失败

前言 使用Mybatis Plus Generator(新代码生成器)达梦数据库,执行生成方法失败 无法创建数据库连接 文章目录 前言问题描述错误日志输出尝试解决最终解决方法 问题描述 创建数据源配置,连接配置参照官网 jdbc:dm://localhost:5236/…

电脑照片怎么导入苹果手机?三个妙招帮你解决!

案例:电脑有很多照片,该如何导入苹果手机? 【家人们,电脑里面的照片怎么样可以快速导入到苹果手机?求方法!】 导入电脑照片到苹果手机是一个常见的需求,尤其是当您希望在手机上随时欣赏和分享这…

从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

.NET多平台应用程序UI(. NET MAUI)的市场吸引力与日俱增,这是微软最新的开发平台,允许开发者使用单个代码库创建跨平台应用程序。尽管很多WPF开发人员还没有跟上 .NET MAUI的潮流,但我们将在这篇文章中为大家展示他的潜…

数字信号处理基础(一)

目录 1. 写在前面2. 连续信号和离散信号2.1连续信号2.2 离散信号 3. 常用信号的产生3.1 单位脉冲序列3.2 单位阶跃序列3.3 指数函数3.4 正弦信号和余弦信号3.5 sinc函数3.6 矩形脉冲信号 4. 信号卷积5. 完整代码 1. 写在前面 为了更好的理解通信原理系列文章,在此补…

说说什么是IO多路复用?以及其演进过程。

文章目录 1.阻塞IO模型(BIO)和 非塞IO模型(NIO)2.什么是IO多路复用?3.IO多路复用的演进? 1.阻塞IO模型(BIO)和 非塞IO模型(NIO) 阻塞IO模型(BIO&…

国考省考行测:科学推理,光学,声学

国考省考行测: 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和行测的重要知识点 遇到寒冬&am…

响应式UI组件库Kendo UI for Vue可轻松创建联系表单!

Kendo UI致力于新的开发,来满足不断变化的需求。Kendo UI for Vue使用旨在提高性能和丰富用户体验的Vue组件,帮助开发人员构建下一代应用程序。它是为Vue技术框架提供可用的Kendo UI组件,以便更快地构建更好的Vue应用程序。 联系表单用于在网…

CRM系统的实施要注意什么?

CRM系统的实施要注意什么? 在如今竞争激烈的商业环境中,拥有一个高效的CRM系统已经变成了企业不可或缺的一部分。 这就来讲一讲,在实施CRM过程中需要注意哪些问题。 01 CRM实施要注意哪些问题? 企业在实施CRM时,需…

虹科案例 | 激光测距仪在高温金属冶炼中的应用

Part.01 应用背景 虹科Dimetix激光测距传感器通常用于钢制热轧机,因为它们提供了一种精确的非接触式方法来确定温度过高而无法触摸的材料的位置或尺寸。苛刻的生产工艺和恶劣的环境条件通常超出了依赖于与被测材料接触的传统传感器的能力。虹科Dimetix激光器拥有良…

博客系统后端设计(五) -实现登录页面要求强制登录功能

文章目录 实现页面要求强制登录实现思路1.约定前后端交互接口2.实现后端代码3.修改前端代码 实现页面要求强制登录 当用户访问列表页/详情页/编辑页的时候,要求用户已经是登录的状态了, 如果用户还没登录,就会强制跳转到登录页面。 实现思路…

精通SpringCloud/Boot配置文件在Nacos中的配置

目录 1 什么是nacos? Nacos 地图 Nacos 生态图 2 springcloud中精通Nacos的配置中心 目录结构 日志配置文件 原始的配置文件 使用Nocas对配置文件进行拆分 引用nacos中的配置文件 共享nacos中的配置文件操作 我们使用同样的方法将日志配置提取出来 1 什么是nacos?…

微信过期视频怎么恢复?恢复视频的方法已经给你总结好了!

案例:微信视频过期,已经被清理怎么办? 【朋友之前发的视频过期了,现在怎么都找不到,有什么方法可以恢复回来吗?感谢!】 微信作为一款热门的社交应用程序,允许用户发送和接收照片、视…

搭建Freekan私人影视电影网站,cpolar内网穿透发布上线

文章目录 1.前言2.本地网页搭建2.1 环境使用2.2 支持组件和环境设置2.3 支持组件选和环境设置2.4 网页安装2.5 测试和使用2.6 问题解决 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDNprobezy的文章:使用Cpolarfreekan源码…

MATLAB绘制动画(五)GIF

GIF这个文件大家就比较熟悉了,我们通常当做表情包的动图一般都是用GIF格式。 这是因为GIF格式的文件比较小,传输速度快。 用MATLAB生成GIF图像同样需要将图像保存下来,通过循环展示动画 代码如下: clc; clear; close all; set…

SpringCloud(27. Redis 和 ZK 分布式锁)

上一篇 :26.分布式服务框架Dubbo面试题简析 1. redis 分布式锁 官方叫做 RedLock 算法,是 redis 官方支持的分布式锁算法。这个分布式锁有 3 个重要的考量点: 互斥(只能有一个客户端获取锁)不能死锁容错(…

关于SD webui 部署运行的一些坑

[Bug 1]: RuntimeError: Couldnt install gfpgan 可以先尝试: pip install gfpgan 不过是在虚拟环境venv下的 E:\stable-diffusion-webui\venv\Scripts\python.exe -m pip install gfpgan 如果还是无法安装gfpgan的原因是网络问题,就算已经科学上网…

maven 项目依赖加载不出来

1.依赖加载不出来,查看pom.xml放的位置是否对了 2.1下载mvn到本地,进行解压 2.2新建系统变量MAVEN_HOME,值直接指向安装目录D:\apache-maven-3.9.2 2.3path变量中增加:%MAVEN_HOME%\bin 2.4若仓库位置不在C盘用户下&#xff0…

SpringMVC对请求的处理流程

1.用户发起some.do请求 2.DispatcherServlet中央调度器接收请求some.do,把请求转交给处理器映射器  处理器映射器:SpringMVC框架中的一种对象,框架实现了HandlerMapping接口的类都叫映射器(多个) 处理器映射器的作用:根据请求&a…

Ajax加强(xhr、XML、JSON、xhr上传文件)

文章目录 一、XMLHttpRequest的基本使用1、 使用xhr发起GET请求2、了解xhr对象的readyState属性3、使用xhr发起带参数的GET请求4、查询字符串5、URL编码与解码6、使用xhr发起POST请求 二、数据交换格式1、XML(1)XML和HTML的区别(2&#xff09…

gma 1.1.6 | 2.0.0a1 (2023.05.14) 更新日志

从现在开始,gma 开始同步更新 gma 2 的前期预览版,并与 gma 1 的正式版同步发布。 gma 1.1.6 更新日志 新增 1、添加 3组 新的指北针样式。 修复 1、【map】高分辨栅格数据集内存溢出问题。   添加高分辨率栅格数据集且进行强制数据缩放时 偶现内存…