引言

很久没有写 Python 了,有一点生疏。这是学习《Python 编程:从入门到实践(第3版)》的课后练习记录,主要目的是快速回顾基础知识。

练习1:汽车租赁

编写一个程序,询问用户要租什么样的汽车,并打印一条消息。

# 使用 input() 函数获取用户输入
car_type = input("请问您想要租什么样的汽车? ")# 使用 f-string 格式化输出,使回复更具动态性
print(f"好的,我来帮您看看是否能找到一辆 {car_type.title()}。")
请问您想要租什么样的汽车? Subaru
好的,我来帮您看看是否能找到一辆 Subaru。

知识点回顾:

  • input() 函数:这是 Python 中获取用户在终端输入的标准方式。程序会在此处暂停,等待用户输入并按回车。
  • 变量存储input() 返回的是一个字符串,我们将其存储在变量 car_type 中以便后续使用。
  • f-string:通过在字符串前加上字母 f,可以直接在花括号 {} 中嵌入变量,使字符串的拼接和格式化变得非常简洁和易读。
  • 字符串方法.title() 方法可以将用户输入的汽车品牌(即使是小写)以首字母大写的规范形式显示出来。

练习2:餐馆订位

编写一个程序,询问用户有多少人用餐。如果超过8个人,就打印一条消息,指出没有空桌;否则指出有空桌。

# 获取用餐人数的输入
guest_count_str = input("您好,请问总共有多少人用餐? ")# 将输入从字符串转换为整数
guest_count = int(guest_count_str)# 使用 if-else 结构进行条件判断
if guest_count > 8:print("非常抱歉,目前没有足够大的空桌,请您稍等片刻。")
else:print("好的,有空桌,这边请!")
您好,请问总共有多少人用餐? 9
非常抱歉,目前没有足够大的空桌,请您稍等片刻。

知识点回顾:

  • 类型转换input() 总是返回字符串类型。要进行数值比较(如大于、小于),必须使用 int() 函数将其显式转换为整数。
  • 条件判断if-else 语句是编程中最基本的控制流结构,用于根据条件的真假执行不同的代码块。
  • 比较运算符> (大于) 是一个比较运算符,用于判断一个数是否大于另一个数,返回布尔值 TrueFalse

练习3: 10的整数倍

让用户输入一个数,并指出这个数是否是10的整数倍。

# 获取用户输入的数字
number_str = input("请输入一个整数,我将判断它是否是10的整数倍:")
number = int(number_str)# 使用求模运算符 % 进行判断
if number % 10 == 0:print(f"数字 {number} 是10的整数倍。")
else:print(f"数字 {number} 不是10的整数倍。")
请输入一个整数,我将判断它是否是10的整数倍:30
数字 30 是10的整数倍。

知识点回顾:

  • 求模运算符 %:也叫取余运算符,它返回两数相除的余数。如果一个数 n % 10 的结果是 0,说明 n 可以被10整除,即是10的倍数。这是判断整除性的通用方法。
  • == 运算符:用于判断两个值是否相等。注意与 =(赋值运算符)区分。

练习4:比萨配料

编写一个循环,提示用户输入一系列比萨配料,并在用户输入’quit’时结束循环。每当用户输入一种配料后,都打印一条消息,指出要在比萨中添加这种配料。

# 定义一个提示信息,方便复用
prompt = "\n请输入您想添加的比萨配料:"
prompt += "\n(输入 'quit' 即可完成点餐) "# 使用 while True 循环,直到遇到 break
while True:topping = input(prompt)if topping == 'quit':break # 当用户输入 'quit' 时,跳出循环else:print(f"好的,我们会在您的比萨中添加 {topping}。")
请输入您想添加的比萨配料:
(输入 'quit' 即可完成点餐) 蘑菇
好的,我们会在您的比萨中添加 蘑菇。请输入您想添加的比萨配料:
(输入 'quit' 即可完成点餐) 培根
好的,我们会在您的比萨中添加 培根。请输入您想添加的比萨配料:
(输入 'quit' 即可完成点餐) quit

知识点回顾:

  • while 循环:用于重复执行一段代码,直到某个条件不再满足。
  • 无限循环与 breakwhile True: 创建了一个理论上会永远执行的循环。break 语句是控制这种循环的关键,它提供了一个出口,当满足特定条件(用户输入’quit’)时,可以立即终止循环。
  • 代码简洁性:将多行提示语存储在一个变量中,可以让 input() 调用本身更整洁。

练习5:电影票

有家电影院根据观众的年龄收取不同的票价:不到3岁的观众免费;3(含)~12岁的观众收费10美元;年满12岁的观众收费15美元。请编写一个循环,在其中询问用户的年龄,并指出其票价。

prompt = "请输入您的年龄(输入非数字或'quit'退出):"while True:age_input = input(prompt)# 允许用户输入 'quit' 退出if age_input == 'quit':break# 使用 try-except 处理无效输入(例如非数字)try:age = int(age_input)except ValueError:print("请输入有效的年龄数字或 'quit'。")continue # 跳过本次循环的余下部分if age < 3:price = "免费"elif age < 12:price = "10美元"else:price = "15美元"print(f"您的票价是:{price}。")
请输入您的年龄(输入非数字或'quit'退出):2
您的票价是:免费。
请输入您的年龄(输入非数字或'quit'退出):10
您的票价是:10美元。
请输入您的年龄(输入非数字或'quit'退出):25
您的票价是:15美元。
请输入您的年龄(输入非数字或'quit'退出):quit

知识点回顾:

  • if-elif-else 结构:当有多个互斥的条件需要判断时,使用 if-elif-else 链条。Python 会从上到下依次检查每个条件,一旦找到满足的,就会执行对应代码块并忽略余下的所有条件。
  • 边界条件:注意条件 age < 3age < 12 的设置。因为程序会按顺序检查,所以第二个条件 age < 12 隐含了 age >= 3 的前提。
  • try-except 错误处理 (可选但推荐):在将输入转换为整数时,如果用户输入了非数字字符,int() 函数会抛出 ValueError 错误导致程序崩溃。使用 try-except 可以优雅地捕获这个错误,提示用户,并使用 continue 语句跳过当前无效的输入,继续下一次循环。

练习6:三种出路

以不同的方式完成练习5,在程序中采取如下做法。

  • while 循环中使用条件测试来结束循环。
  • 使用变量 active 来控制循环结束的时机。
  • 使用 break 语句在用户输入 ‘quit’ 时退出循环。(已在练习5中演示)
# 方法二:使用 active 标志位
prompt = "请输入您的年龄(输入'quit'退出):"
active = True # 设置一个活动标志while active:age_input = input(prompt)if age_input == 'quit':active = False # 将标志位置为 False,循环将在下次检查时结束else:age = int(age_input)if age < 3:print("您的票是免费的")elif age < 12:print("您的票是10美元")else:print("您的票是15美元")
请输入您的年龄(输入'quit'退出):18
您的票是15美元
请输入您的年龄(输入'quit'退出):5
您的票是10美元
请输入您的年龄(输入'quit'退出):quit

知识点回顾:

  • 标志位 (Flag):使用一个布尔变量(如 active)来控制循环的执行状态是一种常见的编程技巧。循环的继续条件是 while active:。当需要退出时,只需在循环内部将 active 设为 False,循环在完成当前迭代后就会自然终止。这种方法比 while True + break 在逻辑上显得更明确。

练习7:无限循环

编写一个没完没了的循环,并运行它。(要结束该循环,可按Ctrl + C

# 这是一个无限循环的经典例子
while True:print("这个循环将永远运行下去,按 Ctrl+C 可以强制停止。")
这个循环将永远运行下去,按 Ctrl+C 可以强制停止。
这个循环将永远运行下去,按 Ctrl+C 可以强制停止。
...
Traceback (most recent call last):File "main.py", line 2, in <module>print("...")
KeyboardInterrupt

知识点回顾:

  • 无限循环while True: 是最直接的无限循环。它在需要程序持续运行直到被外部干预(如用户、操作系统)的情况下非常有用,例如服务器监听请求、游戏主循环等。
  • KeyboardInterrupt:在终端中运行 Python 程序时,按下 Ctrl+C 会发送一个“键盘中断”信号给程序。如果程序没有特殊处理这个信号,默认行为就是终止执行,并抛出 KeyboardInterrupt 异常。

练习8:熟食店

创建一个名为 sandwich_orders 的列表,其中包含各种三明治的名字,再创建一个名为 finished_sandwiches 的空列表。遍历列表,制作三明治并将其移到已完成列表中。

sandwich_orders = ['金枪鱼三明治', '鸡肉法棍', '鸡蛋美乃滋三明治', '素食三明治']
finished_sandwiches = []# 当 sandwich_orders 列表不为空时,循环继续
while sandwich_orders:# 使用 .pop() 取出订单列表中的最后一个三明治current_sandwich = sandwich_orders.pop()print(f"我做好了您的 {current_sandwich}。")# 使用 .append() 将做好的三明治添加到已完成列表finished_sandwiches.append(current_sandwich)print("\n--- 所有三明治都做好了! ---")
for sandwich in finished_sandwiches:print(sandwich)
我做好了您的 素食三明治。
我做好了您的 鸡蛋美乃滋三明治。
我做好了您的 鸡肉法棍。
我做好了您的 金枪鱼三明治。--- 所有三明治都做好了! ---
素食三明治
鸡蛋美乃滋三明治
鸡肉法棍
金枪鱼三明治

知识点回顾:

  • 将列表用作循环条件while sandwich_orders: 是一个非常 Pythonic 的写法。当列表 sandwich_orders 中有元素时,它在布尔上下文中被视为 True;当列表变为空时,它被视为 False,循环自动结束。
  • list.pop() 方法:从列表中移除并返回一个元素,默认是最后一个。这是“处理并移除”任务的理想选择。
  • list.append() 方法:将一个元素添加到列表的末尾。
  • 移动元素:这个练习完美演示了在两个列表之间移动元素的标准模式:从一个列表中 pop,然后 append 到另一个列表中。

练习9:五香烟熏牛肉卖完了

使用练习8的列表,确保 'pastrami' 在其中至少出现了三次。在程序开头打印消息指出 pastrami 卖完了,然后使用 while 循环将列表中的 'pastrami' 全部删除。

sandwich_orders = ['pastrami', '金枪鱼三明治', 'pastrami', '鸡肉法棍', '鸡蛋美乃滋三明治', 'pastrami', '素食三明治'
]
finished_sandwiches = []print("抱歉,我们的五香烟熏牛肉(pastrami)今天卖完了。")# 使用 while 循环删除所有的 'pastrami'
while 'pastrami' in sandwich_orders:sandwich_orders.remove('pastrami')print("\n正在处理剩余订单...")
while sandwich_orders:current_sandwich = sandwich_orders.pop()print(f"我做好了您的 {current_sandwich}。")finished_sandwiches.append(current_sandwich)print("\n--- 所有三明治都做好了! ---")
print(finished_sandwiches)
抱歉,我们的五香烟熏牛肉(pastrami)今天卖完了。正在处理剩余订单...
我做好了您的 素食三明治。
我做好了您的 鸡蛋美乃滋三明治。
我做好了您的 鸡肉法棍。
我做好了您的 金枪鱼三明治。--- 所有三明治都做好了! ---
['素食三明治', '鸡蛋美乃滋三明治', '鸡肉法棍', '金枪鱼三明治']

知识点回顾:

  • in 关键字:用于检查列表中是否包含某个特定元素。'pastrami' in sandwich_orders 会返回 TrueFalse
  • list.remove() 方法:从列表中删除第一个匹配的元素。
  • while 循环删除所有匹配项:如果需要删除列表中所有出现的某个特定值,while value in list: 配合 list.remove(value) 是一个简洁有效的方法。如果使用 for 循环并在循环中删除元素,会因为列表长度动态改变而导致意外行为,所以 while 循环是更安全的选择。

练习10:梦想中的度假胜地

编写一个程序,调查用户梦想中的度假胜地。使用提示,并编写一个打印调查结果的代码块。

# 创建一个空字典来存储调查结果
responses = {}# 设置一个标志来控制循环是否继续
polling_active = Truewhile polling_active:# 收集姓名和回答name = input("\n您好,您叫什么名字? ")place = input("如果您能去世界上的任何一个地方,您会去哪里? ")# 将回答存储在字典中responses[name] = place# 询问是否还有其他人要参与调查repeat = input("还有其他人要参与调查吗? (yes/no) ")if repeat == 'no':polling_active = False# 调查结束,打印结果
print("\n--- 调查结果 ---")
for name, place in responses.items():print(f"{name.title()} 梦想的度假胜地是 {place.title()}。")
您好,您叫什么名字? 张三
如果您能去世界上的任何一个地方,您会去哪里? 冰岛还有其他人要参与调查吗? (yes/no) yes您好,您叫什么名字? 李四
如果您能去世界上的任何一个地方,您会去哪里? 马尔代夫还有其他人要参与调查吗? (yes/no) no--- 调查结果 ---
张三 梦想的度假胜地是 冰岛。
李四 梦想的度假胜地是 马尔代夫。

知识点回顾:

  • 动态填充字典:程序开始于一个空字典 responses,在循环中根据用户的输入动态地添加键值对。responses[name] = place 这行代码完成了赋值。
  • 结合 while 循环和字典:这个练习展示了如何使用循环来收集信息,并用字典这种强大的数据结构来组织和存储这些信息。
  • dict.items() 方法:在最后的 for 循环中,.items() 方法被用来同时遍历字典的键(name)和值(place),这使得打印格式化的结果非常方便。

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

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

相关文章

【华为机试】HJ52 计算字符串的编辑距离

文章目录HJ52 计算字符串的编辑距离描述输入描述输出描述示例1HJ52 计算字符串的编辑距离描述输入描述输出描述示例1解题思路算法分析动态规划状态转移状态转移方程算法流程图DP表格示例三种操作详解代码实现思路时间复杂度分析关键优化技巧实际应用场景算法扩展面试考点完整题…

15.手动实现BatchNorm(BN)

15.1 BatchNorm操作手动实现 import torch from torch import nndef batch_norm(X,gamma,beta,moving_mean,moving_var,eps,momentum):if not torch.is_grad_enabled():#这个是推理模式X_hat(X-moving_mean)/torch.sqrt(moving_vareps)else:assert len(X.shape) in (2,4)if le…

【项目实践】SMBMS(Javaweb版)汇总版

文章目录前期准备工作数据库、数据表创建web项目创建项目文件目录配置Tomcat&#xff0c;导入依赖建立实体类编写基础公共方法类导入基础资源登录功能登录页面持久层dao层的用户登录及接口实现dao层接口实现所需的方法业务层sevice层的接口的实现接口实现相关的业务逻辑编写ser…

隐藏源IP的核心方案与高防实践

一、源IP暴露的风险 直接DDoS攻击&#xff1a;2025年Q2全球DDoS攻击峰值达3.8Tbps&#xff08;来源&#xff1a;Cloudflare报告&#xff09;漏洞利用&#xff1a;暴露的SSH端口平均每天遭受12,000暴力破解尝试数据泄露&#xff1a;直接连接数据库风险提升300% 二、4种有效隐藏方…

深度学习图像分类数据集—五种电器识别分类

该数据集为图像分类数据集&#xff0c;适用于ResNet、VGG等卷积神经网络&#xff0c;SENet、CBAM等注意力机制相关算法&#xff0c;Vision Transformer等Transformer相关算法。 数据集信息介绍&#xff1a;五种电器识别分类&#xff1a;[notebook, phone, powerbank, tablet, w…

Windows11家庭版配置frigate 嵌入自研算法(基于Yolov8)-【2】

使用 YOLOv8 的 results.xyxy 结构&#xff0c;下面是一个完整的 MQTT 推送脚本&#xff0c;用于把识别到的目标&#xff08;比如突涌水、水渍、障碍物等&#xff09;发送到 Frigate 的 MQTT 接口。✅ 前提假设 YOLOv8 推理代码已经运行并生成 results.xyxy。每一行是 [x1, y1,…

安装llama-factory报错 error: subprocess-exited-with-error

报错信息如下 Using cached https://mirrors.aliyun.com/pypi/packages/17/89/940a509ee7e9449f0c877fa984b37b7cc485546035cc67bbc353f2ac20f3/av-15.0.0.tar.gz (3.8 MB)Preparing metadata (pyproject.toml) ... errorerror: subprocess-exited-with-error Preparing metad…

QT 多线程 管理串口

记录一下自己使用多线程进行串口管理和数据读取的过程。如果有问题的话可以发消息给我。背景在使用QT制作一个串口数据读取处理的小软件的时候&#xff0c;发现了存在界面卡顿的情况&#xff0c;感觉性能太低&#xff0c;于是考虑把串口数据的读取和处理都放到子线程的缓冲区中…

在虚拟环境中复现论文(环境配置)

前提&#xff1a;已经下载condawinR&#xff0c;输入cmd进入命令行conda create -n PPT python3.8.3 pytorch1.7.0conda create -n PPT(虚拟环境名) python3.8.3(包名) pytorch1.7.0(包名)安装完毕&#xff0c;激活虚拟环境&#xff1a;conda activate PPT根据论文readme要求安…

Flutter Web 的发展历程:Dart、Flutter 与 WasmGC

Flutter Web 应该是 Flutter 开发者里最不“受宠”的平台了&#xff0c;但是其实 Flutter 和 Dart 团队对于 Web 的投入一直没有减少&#xff0c;这也和 Flutter 还有 Dart 的"出生"有关系&#xff0c;今天就借着 Dart 团队的 mer Ağacan 和 Martin Kustermann 在油…

c#方法关键字,ref、out、int

在 C# 中&#xff0c;ref、out 和 in 是用于方法参数传递的关键字&#xff0c;它们控制参数如何在方法和调用者之间传递数据。以下是对这三个关键字的详细分析&#xff1a;1. ref 关键字&#xff08;引用传递&#xff09;作用允许方法修改调用者的变量&#xff1a;通过引用传递…

设计模式—初识设计模式

1.设计模式经典面试题分析几个常见的设计模式对应的面试题。1.1原型设计模式1.使用UML类图画出原型模式核心角色&#xff08;意思就是使用会考察使用UML画出设计模式中关键角色和关系图等&#xff09;2.原型设计模式的深拷贝和浅拷贝是什么&#xff0c;写出深拷贝的两种方式的源…

深度学习-参数初始化、损失函数

A、参数初始化参数初始化对模型的训练速度、收敛性以及最终的性能产生重要影响。它可以尽量避免梯度消失和梯度爆炸的情况。一、固定值初始化在神经网络训练开始时&#xff0c;将权重或偏置初始化为常数。但这种方法在实际操作中并不常见。1.1全零初始化将所有的权重参数初始化…

格密码--Ring-SIS和Ring-LWE

1. 多项式环&#xff08;Polynomial Rings&#xff09; 设 f∈Z[x]f \in \mathbb{Z}[x]f∈Z[x] 是首一多项式&#xff08;最高次项系数为1&#xff09; 则环 RZ[x]/(f)R \mathbb{Z}[x]/(f)RZ[x]/(f) 元素为&#xff1a;所有次数 <deg⁡(f)< \deg(f)<deg(f) 的多项式…

前端工作需要和哪些人打交道?

前端工作中需要协作的角色及协作要点 前端工作中需要协作的角色及协作要点 前端开发处于产品实现的 “中间环节”,既要将设计方案转化为可交互的界面,又要与后端对接数据,还需配合团队推进项目进度。日常工作中,需要频繁对接的角色包括以下几类,每类协作都有其核心目标和…

万字长文解析 OneCode3.0 AI创新设计

一、研究概述与背景 1.1 研究背景与意义 在 AI 技术重塑软件开发的浪潮中&#xff0c;低代码平台正经历从 “可视化编程” 到 “意图驱动开发” 的根本性转变。这种变革不仅提升了开发效率&#xff0c;更重新定义了人与系统的交互方式。作为国内领先的低代码平台&#xff0c;On…

重学前端006 --- 响应式网页设计 CSS 弹性盒子

文章目录盒模型一、盒模型的基本概念二、两种盒模型的对比 举例三、总结Flexbox 弹性盒子布局一、Flexbox 的核心概念​​二、Flexbox 的基本语法​​​​1. 定义 Flex 容器​​​2. Flex 容器的主要属性​​​​3. Flex 项目的主要属性​​​​三、Flexbox 的常见布局示例​​…

rLLM:用于LLM Agent RL后训练的创新框架

rLLM&#xff1a;用于LLM Agent RL后训练的创新框架 本文介绍了rLLM&#xff0c;一个用于语言智能体后训练的可扩展框架。它能让用户轻松构建自定义智能体与环境&#xff0c;通过强化学习进行训练并部署。文中还展示了用其训练的DeepSWE等智能体的出色表现&#xff0c;以及rLL…

rocky8 --Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】

软件说明&#xff1a; 所有软件包下载地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 打开页面后选择对应的组件及版本即可&#xff01; 所有软件包名称如下&#xff1a; 架构拓扑&#xff1a; 集群模式&#xff1a; 单机模式 架构规划&#xff1a…

【JVM】内存分配与回收原则

在 Java 开发中&#xff0c;自动内存管理是 JVM 的核心能力之一&#xff0c;而内存分配与回收的策略直接影响程序的性能和稳定性。本文将详细解析 JVM 的内存分配机制、对象回收规则以及背后的设计思想&#xff0c;帮助开发者更好地理解 JVM 的 "自动化" 内存管理逻辑…