B站python入门学习(三)函数

news/2025/2/27 7:16:40/文章来源:https://www.cnblogs.com/tsembrace/p/18730358

#函数

函数是组织好的,可重复使用(调用)的,用来实现特定功能的代码段。

"""
不使用内置函数len(),统计字符串长度的计算
"""
def myfunc_len(s):count = 0for c in s:count += 1print(f"字符串{s}的长度是{count}。")return countstr1 = "itheima"
str2 = "python"
myfunc_len(str1)
myfunc_len(str2)

 函数说明文档的标准写法

def add(x, y):"""add函数可以接受两个参数,进行两数相加的功能:param x: 形参x表示相加的一个数:param y: 形参y表示相加的另外一个数:return: 返回值是x和y两数相加的结果"""result = x + yprint(f"两数相加结果是{result}。")return result

函数的嵌套调用

#定义函数func_b
def func_b():print("-----2-----")#定义函数func_a,并在内部调用func_b
def func_a():print("-----1-----")#嵌套调用func_b
    func_b()print("-----3-----")#调用函数func_a
func_a()

变量的作用域

局部变量是定义在函数体内部的变量,只在函数体内部生效

全局变量是指在函数体内、体外都能生效的变量。

如在函数体内部想要修改全局变量,那需要在函数体内部先用global关键字声明变量。 

#演示局部变量
def test_a():num = 100print(num)test_a()
# print(num)   #此处会报错#演示全局变量
num = 200
def t1():print(f"t1:{num}")
def t2():global numnum = 300print(f"t2:{num}")
t1()
t2()
print(num)

#综合案例

以下是自己最初的版本:

"""
综合案例:黑马ATM
1、定义一个全局变量money,记录银行卡余额,默认初始值5000
2、定义一个全局变量name,记录客户姓名(启动程序时输入)
3、定义如下函数:查询余额、存款、取款、主菜单
要求:
*程序启动后输入客户姓名
*查询余额、存款、取款后都会返回主菜单
*存款、取款后都要显示一下当前余额
*客户选择退出或者输入错误程序会退出,否则一直运行
"""name = input("您好,请输入你的姓名:")
money = 5000def main_menu():"""main_menu函数功能为显示主菜单:return: 返回值为客户的选项号码"""print("-----------------------主菜单-----------------------")print(f"{name}您好,欢迎来到黑马银行ATM,请选择操作:")print("查询余额  【输入1】")print("存款        【输入2】")print("取款        【输入3】")print("退出        【输入4】")print("请输入您的选项(1~4):")return int(input())def show_money():"""show_money函数功能为显示当前余额,主要用于其他函数调用:return: 无返回值"""print(f"{name}您好,您当前账户的余额是{money}元。")def check():"""check函数功能为查询余额:return: 无返回值"""global  choiceprint("-----------------------查询余额-----------------------")show_money()choice = main_menu()def withdraw():"""withdraw函数功能为取款,取款后余额须更新 ,且返回主菜单:return: 无返回值"""global moneyglobal choicen = int(input("请输入你要取款的数额(整数)"))while n > money:n = int(input("请重新输入你要取款的数额(整数)"))money -= nshow_money()choice = main_menu()def deposit():"""deposit函数功能为存款,存款后余额须更新显示,且返回主菜单:return:"""global moneyglobal choicen = int(input("请输入你要存款的数额(整数)"))money += nshow_money()choice = main_menu()choice = main_menu()
while choice != 4:if choice == 1:check()elif choice == 2:deposit()elif choice == 3:withdraw()else:choice = int(input("您的选项输入有误,请重新输入(1~4):"))print("感谢您的使用,欢迎下次光临!")

以下是黑马老师的版本,相比之下,设计思想、逻辑更合理顺畅。

"""
综合案例:黑马ATM
1、定义一个全局变量money,记录银行卡余额,默认初始值5000
2、定义一个全局变量name,记录客户姓名(启动程序时输入)
3、定义如下函数:查询余额、存款、取款、主菜单
要求:
*程序启动后输入客户姓名
*查询余额、存款、取款后都会返回主菜单
*存款、取款后都要显示一下当前余额
*客户选择退出或者输入错误程序会退出,否则一直运行
"""#这个版本是黑马老师的版本,逻辑上更清晰#先定义全局变量
name = None          #先不直接输入赋值,先定义
money = 5000#再通过行为赋值
name = input("您好,请输入你的姓名:")def main():    #直接函数名起为main()更清爽"""main函数功能为显示主菜单:return: 返回值为客户的选项号码"""print("-----------------------主菜单-----------------------")print(f"{name}您好,欢迎来到黑马银行ATM,请选择操作:")print("查询余额  【输入1】")print("存款        【输入2】")print("取款        【输入3】")print("退出        【输入4】")print("请输入您的选项(1~4):")return input()def check(show_header):"""check函数功能为查询余额:s 形参s为真时打印头行字符,否则不打印:return: 无返回值"""if show_header:print("-----------------------查询余额-----------------------")print(f"{name}您好,您当前账户的余额是{money}元。")def withdraw():"""withdraw函数功能为取款,取款后余额须更新 ,且返回主菜单:return: 无返回值"""global moneyn = int(input("请输入你要取款的数额(整数)"))while n > money:n = int(input("取款数额过大,请重新输入你要取款的数额(整数)"))money -= nprint(f"您已成功取款{n}元。")check(False)   #通过check函数设置def deposit():"""deposit函数功能为存款,存款后余额须更新显示,且返回主菜单:return:"""global moneyn = int(input("请输入你要存款的数额(整数)"))money += nprint(f"您已成功存款{n}元。")check(False)  # 通过check函数不传参的功能#认真看看主程序的逻辑,对比自己的写法,值得学习
while True:x_choice = main()if x_choice == "1":check(True)continueelif x_choice == "2":deposit()continueelif x_choice == "3":withdraw()continueelse:print("欢迎您下次光临!")break

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSSH2:通过浏览器实现SSH登录Linux主机

如果你的电脑不允许安装远程工具,那么本篇文章非常适合你,我们使用浏览器去登录Linux主机。 下面我演示一下如何安装WebSSH2,并通过浏览器登录到Linux主机。 一、安装环境 操作系统:CentOS7.6; 关闭防火墙和 SELinux; 二、安装 NVM 安装过程很简单,下载脚本运行即可: c…

Nativefier:将网页变为桌面应用的便捷工具

我们每天都会使用大量的网页应用,例如 Gmail、Trello、Notion 或 Spotify。然而,频繁在浏览器中切换标签页可能降低工作效率,也容易让人分心。有没有一种方法能将常用的网页变成独立的桌面应用,提供更专注的体验?Nativefier 应运而生,它是一款开源命令行工具,能够快速将…

web开发 辅助学习管理系统开发日记 day3

Q1:讲解了关于日志输出的方法:首先引入logback以来以及相关的xml文件到resources的文件夹下。然后到test目录下进行测试 可以通过调整logback的xml文件来调整日志输出的格式,以及位置日志级别记录如下Q2:通过这条外键约束可以将两表关联后避免删除误删两边关联所需要的键值产…

How to Fix Raspberry Pi Imager lost Advanced Menu problem All In One

Raspberry Pi Imager removed Advanced Menu All In One 如何修复 Raspberry Pi Imager 丢失高级菜单问题Raspberry Pi Imager removed Advanced Menu All In One如何修复 Raspberry Pi Imager 丢失高级菜单问题树莓派 bug Raspberry Pi Imager v1.8.5 删除高级菜单选项 ❓solu…

WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战

开源项目名称:leagueoflegends-OpenSilver 作者:Vicky&James leagueoflegends-opensilver:https://github.com/jamesnetgroup/leagueoflegends-opensilver leagueoflegends-wpf:https://github.com/jamesnetgroup/leagueoflegends-wpf Jamesnet个人网站:https://jamesnet…

Raspberry Pi Imager removed Advanced Menu All In One

Raspberry Pi Imager removed Advanced Menu All In One Raspberry Pi Imager 已删除高级菜单Raspberry Pi Imager removed Advanced Menu All In OneRaspberry Pi Imager 已删除高级菜单raspberry pi imager advanced options missing demos树莓派 bugRaspberry Pi Imager v1.…

作业一 自我介绍+软工5问

| 这个作业属于哪个课程 | <班级> | | ----------------- |--------------- | | 这个作业要求在哪里| <作业要求> | | 这个作业的目标 | <- 介绍自己,比如兴趣爱好,学习或者生活经历,认为有趣或者值得向别人展示的记忆快速阅读教材,提出5个想弄懂的问题。 想…

《软件开发与创新课程设计》第一次作业:软件二次开发

一、项目名称与来源 该项目名为体育新闻信息查询系统,源码来自同学。 二、目的 项目体育新闻信息查询系统的目的是基于Java和JavaScript创建一个能够查询体育新闻的web系统。本次作业的目的是基于该系统的基础上进行二次开发。 三、部分原代码 1.体育新闻网点击查看代码 <!…

如何更改 debian 系统家目录中文件夹的语言

一、当前家目录文件夹是中文 当时安装系统的时候,选择了中文,导致家目录的文件夹也是中文的。这导致在命令行中会出现中文路径,现在想把它改成英文的。二、改成英文 家目录的 .config 文件夹中有两个文件与此相关,它们分别是: # /home/xxx/.config user-dirs.dirs user-di…

C++ 超市零售系统二次开发

一、来源 本次分析与二次开发的超市零售系统项目名称为 "SimpleSupermarketManagement", 作者是 GitHub 用户 "CodeExplorer1995",项目地址为https://github.com/CodeExplorer1995/SimpleSupermarketManagement。该项目旨在为小型超市提供基础的业务管理…

IOC 和 DI 详解及其简单用法

1. IOC 详解 1.1 Bean 的声明 IOC 控制反转,就是将对象的控制权交给 Spring 的 IOC 容器,由 IOC 容器创建及管理对象。IOC 容器创建的对象称为 bean 对象。 而 Spring 框架为了更好的标识 Web 应用程序开发当中,bean 对象到底归属于哪一层,又提供了 @Component 的衍生注解:…

开源一款DDS信号发生扩展板-FreakStudio多米诺系列

信号发生扩展板通过SPI接口生成可调频率和幅度的正弦波、方波和三角波,频率小于1MHz。支持幅度调节,提供原始和6倍放大输出接口。配备5阶低通滤波器、噪声抑制功能,优化信号稳定性。原文链接: FreakStudio的博客 摘要 信号发生扩展板通过SPI接口生成可调频率和幅度的正弦波…