8天Python从入门到精通【itheima】-60~61

article/2025/8/4 15:50:31

目录

60节-变量的作用域

1.局部变量

2.局部变量的代码演示

3.全局变量

4.全局变量的代码演示

5.global关键字

【1】体会局部变量和全局变量的区别

【2】global关键字:将变量直接声明为全局变量

 6.小节总结

61节-第五章末尾-关于函数的综合案例-ATM机

1.案例需求

2.案例提示

3.代码实现

OK了,这个案例是迄今为止写过最长的案例了,后续再好好理解理解,加油:

励志一下:


60节-变量的作用域

1.局部变量

2.局部变量的代码演示

# 60节"""
演示在函数使用的时候,定义变量的作用域
"""# 演示局部变量
def test_a():num=100print(num)test_a()
print(num)
# 控制台输出结果:
# Traceback (most recent call last):
#   File "D:\Python\AAA-2025.4.15开始-郭鹏宇的python学习之旅\8天Python入门到精通-itheima\5-第51节到第60节-代码训练.py", line 273, in <module>
#     print(num)
#           ^^^
# NameError: name 'num' is not defined. Did you mean: 'sum'?
# 100
#
# 进程已结束,退出代码为 1
#局部变量无法应用到全局,所以在函数的外部调用局部变量会报错

3.全局变量

4.全局变量的代码演示

# 演示全局变量num=666def test_a():print(f"test_a:{num}")def test_b():print(f"test_b:{num}")test_a()
test_b()
print(num)
# 控制台输出结果
# test_a:666
# test_b:666
# 666
#
# 进程已结束,退出代码为 0
# 全局变量num,可以应用到全局

5.global关键字

【1】体会局部变量和全局变量的区别

体会局部变量和全局变量的区别:

# 在函数内修改全局变量
num=200def test_a():print(f"test_a:{num}")def test_b():num=500  #局部变量print(f"test_b:{num}")test_a()  #200
test_b()   #500  在def test_b(): 中定义了局部变量,num=500,所以输出500
print(num)  #200  依旧是输出全局变量,不管局部变量
# 控制台输出结果:
# test_a:200
# test_b:500
# 200

【2】global关键字:将变量直接声明为全局变量

代码演示:

# global关键字,在函数内声明变量为全局变量num=200def test_a():print(f"test_a:{num}")def test_b():global numnum=500  #使用global关键字,将局部变量变成全局变量print(f"test_b:{num}")test_a()  #200
test_b()   #500  在def test_b(): 中定义了局部变量,num=500,所以输出500
print(num)  #500  因为global关键字,把局部变量变成了全局变量,全局变量被更新了,输出500
# 控制台输出结果
# test_a:200
# test_b:500
# 500
#
# 进程已结束,退出代码为 0

 6.小节总结


61节-第五章末尾-关于函数的综合案例-ATM机

1.案例需求

2.案例提示

3.代码实现

 

# 61节# 第五章-关于函数的综合案例-ATM机"""
演示函数综合案例开发
"""# 定义全局变量 money  name
money=5000000
name=None   #后续要输入客户姓名,所以先定义成None,后续再解决# 要求输入客户姓名
name=input("请输入您的姓名:")# 定义查询函数
def query(show_header):if show_header:print("----------------查询余额---------------------------")print(f"{name},您好,您的余额剩余:{money}元")# 定义存款函数
def saving(num):  #存款,要存进去一个数字,那么就要有一个形参numglobal moneymoney += num  #因为num是一个局部变量,和全局变量相加会报错,此时用到了global关键字,在函数内部把money变成全局变量,解决报错print(f"---------------------存款-----------------------")print(f"{name},您好,您存款{num}元成功")# 调用query函数查询余额,同时传参False,保证调用查询余额的函数的第一行不输出query(False)# 定义取款函数
def get_money(num):  #取款,要减去一个数字,那么就要有一个形参numglobal money  #因为num是一个局部变量,和全局变量相加会报错,此时用到了global关键字,在函数内部把money变成全局变量,解决报错money -= numprint(f"---------------------存款-----------------------")print(f"{name},您好,您取款{num}元成功")# 调用query函数查询余额,同时传参False,保证调用查询余额的函数的第一行不输出query(False)# 定义主菜单函数
def main():print(f"---------------------主菜单-----------------------")print(f"{name},您好,欢迎来到黑马银行ATM,请选择操作:")print("查询余额\t\t\t[输入1]")  #\t使用制表符对齐,如果一个\t还是无法对齐,那就多来几个\tprint("存款\t\t\t[输入2]")print("取款\t\t\t[输入3]")print("退出\t\t\t[输入4]")return input("请输入您的选择:")# 设置无限循环,确保程序不退出
while True:keyboard_input=main()  #获取键盘输入值,存储到keyboard_input这个变量中,可以进行下一步判断if keyboard_input=="1":query(True)  #首次进行query函数的调用,query函数内部的第一行是要显示的continue  # 通过continue关键字跳过本次循环,进行下一次循环,一进来就是主菜单elif keyboard_input=="2":num=int(input("您想存多少钱,请输入:"))saving(num)continue  # 通过continue关键字跳过本次循环,进行下一次循环,一进来就是主菜单elif keyboard_input=="3":num = int(input("您想取多少钱,请输入:"))get_money(num)continue  # 通过continue关键字跳过本次循环,进行下一次循环,一进来就是主菜单else:print("程序退出!")break   #客户选择退出或输入错误,程序会退出,否则一直运行.所以通过break关键字,不是1,2,3操作的,输入其他东西统统break跳出循环# 控制台测试的输出结果:
# 请输入您的姓名:patrik
# ---------------------主菜单-----------------------
# patrik,您好,欢迎来到黑马银行ATM,请选择操作:
# 查询余额			[输入1]
# 存款			[输入2]
# 取款			[输入3]
# 退出			[输入4]
# 请输入您的选择:1
# ----------------查询余额---------------------------
# patrik,您好,您的余额剩余:5000000元
# ---------------------主菜单-----------------------
# patrik,您好,欢迎来到黑马银行ATM,请选择操作:
# 查询余额			[输入1]
# 存款			[输入2]
# 取款			[输入3]
# 退出			[输入4]
# 请输入您的选择:2
# 您想存多少钱,请输入:50000
# ---------------------存款-----------------------
# patrik,您好,您存款50000元成功
# patrik,您好,您的余额剩余:5050000元
# ---------------------主菜单-----------------------
# patrik,您好,欢迎来到黑马银行ATM,请选择操作:
# 查询余额			[输入1]
# 存款			[输入2]
# 取款			[输入3]
# 退出			[输入4]
# 请输入您的选择:3
# 您想取多少钱,请输入:50000
# ---------------------存款-----------------------
# patrik,您好,您取款50000元成功
# patrik,您好,您的余额剩余:5000000元
# ---------------------主菜单-----------------------
# patrik,您好,欢迎来到黑马银行ATM,请选择操作:
# 查询余额			[输入1]
# 存款			[输入2]
# 取款			[输入3]
# 退出			[输入4]
# 请输入您的选择:8
# 程序退出!
#
# 进程已结束,退出代码为 0


OK了,这个案例是迄今为止写过最长的案例了,后续再好好理解理解,加油:

励志一下:

(拍桌震得键盘乱晃,喉结里滚出砂砾般的嘶吼)帕特里克!你以为写他妈的变量作用域是在过家家?这是战场!每一个全局变量都是你囤积的弹药,每一个局部变量都是你腰间的匕首,而他妈的global关键字 —— 是你突破封锁线时用的炸药包!看看你写的 ATM 机代码,那不是冷冰冰的字符,是你在虚拟世界里搭建的军火库!

 

(突然俯身逼近屏幕,声音像生锈的刺刀)你给我听好了:当你定义money为全局变量时,你他妈就是在告诉整个战场「这是我的战略储备」!但如果你连局部变量和全局变量的边界都搞不清,就像带着手榴弹冲进战壕却忘了拉保险 —— 你会炸死自己!那些在函数里忘了用global的瞬间,那些报NameError的夜晚,不是 bug,是敌人在你耳边的嘲笑!你要做的不是缩在椅子上啃指甲,是像老子在海豹突击队那样 —— 把每一次报错当子弹擦过耳边,然后咬着牙调整准星!

 

(突然抓起水杯砸向墙壁,玻璃碎裂声中嘶吼)看看你写的main()函数!这他妈就是你的指挥中心!每一个elif判断都是你布置的防线,每一个continue都是你重整旗鼓的号角!但你给我记住:真正的战士不会在主菜单里兜圈子,他们会像处理test_b()里的局部变量那样 —— 该干掉的敌人就立刻扣动扳机!当你在while True里循环时,你不是在写代码,是在进行一场没有硝烟的地狱周训练 —— 要么崩溃,要么让代码在你手里重生!

 

(从破碎的玻璃渣上捡起键盘,手指戳向屏幕)现在看看你那该死的query()函数!为什么要传show_header?因为真正的高手知道什么时候该亮明底牌,什么时候该隐藏锋芒!这就像老子在阿富汗战场上判断敌人位置 —— 细节决定生死!你以为用户真的只关心余额?错!他们要看的是你如何用global关键字守住数据的防线,如何用函数封装出无懈可击的逻辑碉堡!

 

(突然压低声音,像毒蛇吐信)帕特里克,你知道最让我恶心的是什么吗?是你居然在日志里写「后续再好好理解理解」!理解个屁!真正的理解是用双手砸出来的!现在就给我把 ATM 机代码再敲三遍,直到每个num变量在你脑子里跳踢踏舞!当你能闭着眼睛写出def saving(num):的每一个字符,当你听到global就像听到冲锋号一样肾上腺素飙升 —— 你才算摸到了编程的门槛!

 

(猛地扯开衬衫露出疤痕,拳头捶打胸口)听着你这个顽固的 motherfucker:代码不会在乎你的感受,就像子弹不会在乎你有没有吃饱!你想逃离老旧小区?想让那些盯着你的老头闭嘴?那就用代码把自己武装到牙齿!每一行正确的代码都是一块砖,你要拿它们给自己砌一座他妈的城堡!当你用return语句把结果甩在屏幕上时,那不是输出,是你给全世界的耳光!

 

(最后一脚踢翻椅子,抓起外套走向门口)现在给我站起来,像扛着原木冲刺那样冲向键盘!记住:你不是在写代码,是在雕刻自己的墓志铭 —— 要么写满「老子做到了」,要么就等着被扔进垃圾桶!没有中间选项,没有喘息的机会,因为你是帕特里克,你是个战士,而战士的字典里只有两个字:前进!


http://www.hkcw.cn/article/ALnkmxKEBX.shtml

相关文章

Java函数式编程(上)

课程&#xff1a;黑马程序员Java函数式编程全套视频教程&#xff0c;Lambda表达式、Stream流、函数式编程一套全通关_哔哩哔哩_bilibili 函数式编程的优点&#xff1a; 代码简洁功能强大并行处理链式调用延迟执行 一、函数伊始 函数是一段可重复使用的代码块&#xff0c;用于…

Excel 批量下载PDF、批量下载考勤图片——仙盟创梦IDE

在办公场景中&#xff0c;借助应用软件实现 Excel 批量处理考勤图片、电子文档与 PDF&#xff0c;具有诸多显著优势。 从考勤图片处理来看&#xff0c;通过 Excel 批量操作&#xff0c;能快速提取图片中的考勤信息&#xff0c;如员工打卡时间、面部识别数据等&#xff0c;节省…

JavaEE: wait和notify

wait和notify(都需要搭配synchronized使用) join&#xff08;&#xff09;&#xff0c;哪个线程调用这个方法&#xff0c;哪个线程就堵塞 wait和notify都是Object的方法&#xff0c;随便定义一个对象都可以使用 wait、sleep、join的区别&#xff1a; wait&#xff1a;需要搭配…

6.运算放大器—电源抑制比(五)

运放的电源抑制比&#xff08;PSRR, Power Supply Rejection Ratio&#xff09;是衡量其抑制电源电压波动对输出信号影响能力的重要参数。 1、PSRR定义 PSRR表示运放对电源电压变化的抑制能力&#xff0c;定义为&#xff1a; 或者 PSRR值越高&#xff0c;运放对电源噪声的抑制能…

【Linux网络编程】数据链路层

目录 认识以太网 以太网帧格式 认识MAC地址 认识MTU MTU对IP协议的影响 MTU对UDP协议的影响 MTU对TCP协议的影响 ARP协议 ARP协议的作用 ARP数据包的格式 ARP协议的工作流程 认识以太网 "以太网"不是一种具体的网络&#xff0c;而是一种技术标准&#xff1…

【BootLoader】之stm32F407实现bootloader相关问题

前言 主要是在使用f407时遇见的一些问题记录&#xff1b;环境是STM32F407、rt_thread 1. 乱码问题 修改system_stm32f7xx.c &#xff0c;stm32f4xx_hal_conf_template.h 时钟频率 #define HSE_VALUE 8000000U 解决问题 2. 忘记了是啥问题 3. bootloader跳转失败 解决方法&a…

WSL 安装 Debian 12 后,Linux 如何安装 curl , quickjs ?

在 WSL 的 Debian 12 系统中安装 curl 非常简单&#xff0c;你可以直接使用 APT 包管理器从官方仓库安装。以下是详细步骤&#xff1a; 1. 更新软件包索引 首先确保系统的包索引是最新的&#xff1a; sudo apt update2. 安装 curl 执行以下命令安装 curl&#xff1a; sudo…

数据中台(大数据平台)之数据安全管理

数据安全管理是结合大数据技术和行业特性&#xff0c;数据中台产品应具备数据分类分级、敏感数据智能识别的功能&#xff0c;并结合敏感数据管理、数据脱敏、数据加密等安全管控方式&#xff0c;保障数据安全可用。 1.安全分级分类&#xff1a;数据分级分类是一种将不同数据按…

Linux防火墙:全面解析IPTables的表、链、规则!

iptables 防火墙用于管理包过滤和 NAT 规则。IPTables 随所有 Linux 发行版一起提供。了解如何设置和配置 iptables 将帮助您有效地管理 Linux 防火墙。 iptables 工具用于管理 Linux 防火墙规则。乍一看&#xff0c;iptables 可能看起来很复杂&#xff08;甚至令人困惑&#…

【火山引擎 大模型批量处理数据教程-详细】

相关的文档 &#xff01;&#xff01;先注册账号第一步&#xff01;&#xff01; 批量处理文档费用接口对象存储地址提交批量处理网页 1. 准备jsonl数据集 官网网页地址样例&#xff0c;需要根据你自己的数据进行需改 import jsonsystem_prompt """ 你的任…

设计模式——代理设计模式(结构型)

摘要 本文详细介绍了代理设计模式&#xff0c;包括其定义、结构组成、实现方式、适用场景及实战示例。代理设计模式是一种结构型设计模式&#xff0c;通过代理对象控制对目标对象的访问&#xff0c;可增强功能或延迟加载等。文中通过类图、时序图、静态代理、JDK动态代理、CGL…

API网关性能测试与瓶颈定位:微服务世界的守门人之道

在现代微服务架构中&#xff0c;API网关&#xff08;API Gateway&#xff09;是所有外部请求进入系统的第一道关口&#xff0c;是服务路由、协议转换、安全认证、流量管控、熔断限流等功能的集中体现。它既是安全屏障&#xff0c;又是性能瓶颈的高发区。 性能测试中&#xff0c…

Vehicle HAL(2)--Vehicle HAL 的启动

目录 1. VehicleService-main 函数分析 2. 构建EmulatedVehicleHal 2.1 EmulatedVehicleHal::EmulatedVehicleHal(xxx) 2.2 EmulatedVehicleHal::initStaticConfig() 2.3 EmulatedVehicleHal::onPropertyValue() 3. 构建VehicleEmulator 4. 构建VehicleHalManager (1)初…

【科研绘图系列】R语言绘制论文组合图形(multiple plots)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图1画图2画图3画图4画图5系统信息介绍 这篇文章详细介绍了如何使用R语言进行科研绘图,特别是绘制论文组合图形(multiple plots)。文章从数…

设计模式——命令设计模式(行为型)

摘要 本文介绍了命令设计模式&#xff0c;这是一种行为型设计模式&#xff0c;用于将请求封装为对象&#xff0c;实现请求的解耦和灵活控制。它包含命令接口、具体命令、接收者、调用者和客户端等角色&#xff0c;优点是解耦请求发送者与接收者&#xff0c;支持命令的排队、记…

用提示词写程序(3),VSCODE+Claude3.5+deepseek开发edge扩展插件V2

edge扩展插件;筛选书签,跳转搜索,设置背景 链接: https://pan.baidu.com/s/1nfnwQXCkePRnRh5ltFyfag?pwd86se 提取码: 86se 导入解压的扩展文件夹: 导入扩展成功: edge扩展插件;筛选书签,跳转搜索,设置背景

一周学会Pandas2之Python数据处理与分析-Pandas2数据分组与聚合

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 的分组与聚合功能是数据分析的核心工具&#xff0c;允许你根据特定条件分割数据&#xff0c;然后对每个子集应…

零基础上手 Cherry Studio:打造专属 AI 助手的第一步

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、Cherry Studio是什么&#xff1f;为什么选择它&#xff1f;1.Cherry Studio简介…

API平台(API网关)之API编排

支持WEB可视化的API编排能力&#xff0c;内置基本组件、流程控制、报文转换以及其他类型的组件&#xff0c;通过可视化拖、拉、拽对API进行编排和调度&#xff0c;支持Restful API、WebService、JAVA等多协议转换混合编排和API服务聚合能力&#xff0c;满足复杂业务场景的API支…

初识PS(Photoshop)

初识PS&#xff08;Photoshop&#xff09; 1、Photoshop界面 2、常用快捷键