上一节中全面讲解了基础知识,为了巩固知识点,当然最好的方法就是练习了。

练习 1:变量类型转换与算术运算

需求:接收用户输入的两个数字(可能是整数或字符串格式),转换为浮点数后计算 “幂运算、整除、取余” 结果,并打印类型信息。

def main():num1_str = input("first number:")num2_str = input("second number:")fnum1 = float(num1_str)fnum2 = float(num2_str)pow_result = fnum1 ** fnum2div_result = fnum1 // fnum2mod_result = fnum1 % fnum2# 打印结果与类型print(f"\n{fnum1}{fnum2} 次幂:{pow_result},类型:{type(pow_result)}")print(f"{fnum1} 整除 {fnum2}{div_result},类型:{type(div_result)}")print(f"{fnum1} 取余 {fnum2}{mod_result},类型:{type(mod_result)}")if __name__ == "__main__":main()

结果:
在这里插入图片描述

练习 2:多条件判断与循环

需求:遍历 1~20 的整数,按以下规则分类打印:
能被 3 和 5 同时整除:打印 “[数字] 是 3 和 5 的倍数”
能被 3 整除:打印 “[数字] 是 3 的倍数”
能被 5 整除:打印 “[数字] 是 5 的倍数”
其余数字:打印 “[数字] 不是目标倍数”

def main():for i in range(1,21):if i % 3 == 0 and i %5 == 0:print(f"[{i}] 是 3 和 5 的倍数")elif i %3 == 0:print(f"[{i}] 是 3 的倍数")elif i % 5 == 0:print(f"[{i}] 是 5 的倍数")else:print(f"[{i}] 不是目标倍数")if __name__ == "__main__":main()

结果:
在这里插入图片描述

练习 3:可变参数与多返回值

需求:定义一个函数,接收 “固定参数(商品基础价)+ 可变位置参数(折扣比例列表)+ 可变关键字参数(额外费用,如运费、服务费)”,计算并返回 “最低折扣价、最高折扣价、最终总价(基础价 × 折扣 + 额外费用总和)”。

def calculate_price(base_price,*discount,**extra_fees):# 计算最低/最高折扣价min_discount_price = base_price * min(discount)max_discount_price = base_price * max(discount)# 计算额外费用总和(关键字参数的value求和)total_extra = sum(extra_fees.values())# 计算最终总价(取最低折扣价+额外费用)final_price = min_discount_price + total_extra# 多返回值(实际返回元组)return min_discount_price, max_discount_price, final_priceif __name__ == "__main__":min_p,max_p,final_p = calculate_price(100,0.8,0.9,ship = 10,servce=5)# 打印结果print(f"基础价:100 元")print(f"最低折扣价:{min_p:.2f} 元")print(f"最高折扣价:{max_p:.2f} 元")print(f"最终总价(最低折扣+额外费用):{final_p:.2f} 元")

结果:
在这里插入图片描述

练习 4:函数装饰器

需求:定义一个 “计时装饰器”,用于统计任意函数的执行时间,并打印 “函数名、参数、返回值、执行耗时”。

import timeimport time# 定义计时装饰器
def time_decorator(func):def wrapper(*args, **kwargs):# 执行前:记录开始时间start_time = time.time()# 调用原函数,获取返回值result = func(*args, **kwargs)# 执行后:计算耗时,打印信息end_time = time.time()cost_time = (end_time - start_time) * 1000  # 转换为毫秒print(f"\n=== 函数执行报告 ===")print(f"函数名:{func.__name__}")print(f"位置参数:{args}")print(f"关键字参数:{kwargs}")print(f"返回值:{result}")print(f"执行耗时:{cost_time:.2f} 毫秒")return resultreturn wrapper# 使用装饰器装饰目标函数(计算1到n的和)
@time_decorator
def sum_to_n(n):total = 0for i in range(1, n+1):total += ireturn totalif __name__ == "__main__":sum_result = sum_to_n(100000)print(f"\n1到100000的和:{sum_result}")sum_result = sum_to_n(1000000)print(f"\n1到100000的和:{sum_result}")

结果:
在这里插入图片描述

练习 5:列表与字典操作

需求:

用列表存储 5 个学生的姓名和成绩(格式:["张三:90", "李四:85", ...])
将列表转换为字典(键:姓名,值:成绩)
筛选出成绩≥85 的学生,按成绩降序排序并打印
def main():students = ["张三:88","李四:66","王五:99","赵六:66","二蛋:85"]#2.转换为字典score_dict = {}for text in students:key,value = text.split(":")score_dict[key] = int(value)high_score_student = [(name,score) for name,score in score_dict.items() if score >= 85]print(high_score_student)sorted_student = sorted(high_score_student,key = lambda x :x[1],reverse = True)print(sorted_student)if __name__ == "__main__":main()

结果:
在这里插入图片描述

练习 6:集合运算

需求:已知两个集合(A:数学满分学生,B:语文满分学生),计算 “两科都满分(交集)、至少一科满分(并集)、仅数学满分(差集)” 的学生名单。

def main():# 定义两个集合math_full = {"张三", "李四", "赵六"}  # 数学满分chinese_full = {"李四", "王五", "孙七"}  # 语文满分# 集合运算both_full = math_full & chinese_full  # 交集:两科都满分any_full = math_full | chinese_full   # 并集:至少一科满分only_math = math_full - chinese_full  # 差集:仅数学满分# 打印结果print("数学满分学生:", math_full)print("语文满分学生:", chinese_full)print("两科都满分学生:", both_full)print("至少一科满分学生:", any_full)print("仅数学满分学生:", only_math)if __name__ == "__main__":main()

结果:
在这里插入图片描述

练习 7:字符串格式化与常用方法

需求:接收用户输入的 “姓名、年龄、身高(cm)”,按以下格式输出个人信息,并统计 “姓名长度、身高是否≥170cm”:

def main():# 接收用户输入name = input("请输入姓名:")age_str = input("请输入年龄:")height_str = input("请输入身高(cm):")# 数据处理:年龄转整数,身高转整数age = int(age_str)height = int(height_str)# 字符串格式化(f-string)info = f"""【个人信息卡】
姓名:{name}(长度:{len(name)}字)
年龄:{age}岁(明年:{age+1}岁)
身高:{height}cm(是否达标:{'是' if height >= 170 else '否'})"""# 打印结果print(info)if __name__ == "__main__":main()

结果:
在这里插入图片描述

练习 8:文件读写与内容统计

需求:
向 “student.txt” 文件写入 3 行学生信息(格式:姓名,年龄,成绩)
读取文件内容,统计 “平均成绩、最高成绩及对应姓名”
将统计结果追加到文件末尾

def file_read_write_demo():# 1. 写入文件(覆盖模式,若文件不存在则创建)with open("student.txt", "w", encoding="utf-8") as f:f.write("张三,20,90\n")f.write("李四,19,85\n")f.write("赵六,21,95\n")print("已写入学生信息到 student.txt")# 2. 读取文件并统计names = []scores = []with open("student.txt", "r", encoding="utf-8") as f:for line in f:line = line.strip()  # 去除换行符和空格if not line:continue  # 跳过空行name, age_str, score_str = line.split(",")names.append(name)scores.append(int(score_str))# 计算统计结果avg_score = sum(scores) / len(scores)max_score = max(scores)max_score_name = names[scores.index(max_score)]# 3. 追加统计结果到文件with open("student.txt", "a", encoding="utf-8") as f:f.write("\n=== 成绩统计结果 ===\n")f.write(f"平均成绩:{avg_score:.1f}\n")f.write(f"最高成绩:{max_score}{max_score_name})\n")print("已追加统计结果到 student.txt")# 验证:读取文件全部内容并打印with open("student.txt", "r", encoding="utf-8") as f:content = f.read()print("\n文件全部内容:")print(content)# 调用函数
file_read_write_demo()

结果:
在这里插入图片描述

练习 9:类的继承与多态

需求:
定义父类 “Animal”,包含 “name” 属性和 “make_sound” 方法(纯虚函数风格)
定义子类 “Dog”“Cat”“Bird”,重写 “make_sound” 方法(分别输出 “汪汪”“喵喵”“叽叽”)
定义函数 “animal_sound_show”,接收任意 Animal 对象,调用其 “make_sound” 方法(多态)

class Animal:def __init__(self, name):self.name = name  # 公开属性def make_sound(self):# 父类方法:子类需重写raise NotImplementedError("子类必须重写 make_sound 方法")# 子类1:Dog
class Dog(Animal):def make_sound(self):print(f"{self.name} 叫:汪汪汪!")# 子类2:Cat
class Cat(Animal):def make_sound(self):print(f"{self.name} 叫:喵喵喵!")# 子类3:Bird
class Bird(Animal):def make_sound(self):print(f"{self.name} 叫:叽叽叽!")# 多态函数:接收任意Animal子类对象
def animal_sound_show(animal):if isinstance(animal, Animal):  # 检查是否为Animal类型animal.make_sound()else:print("不是有效的Animal对象!")# 测试:创建对象并调用多态函数
dog = Dog("大黄")
cat = Cat("小白")
bird = Bird("啾啾")animal_sound_show(dog)
animal_sound_show(cat)
animal_sound_show(bird)
# 测试无效对象
animal_sound_show("不是动物")

在这里插入图片描述

练习 10:特性(property)与访问控制

需求:定义 “Person” 类,用 “特性” 控制 “age” 属性:
年龄必须是 0~150 的整数,否则报错
提供 “get_age”(获取年龄)和 “set_age”(设置年龄)的逻辑,外部通过 “p.age” 直接访问

class Person:def __init__(self, name, age):self.name = name# 初始化时调用setter,确保年龄合法self.age = age# 特性:getter(获取年龄)@propertydef age(self):return self._age  # _age 是约定的私有变量# 特性:setter(设置年龄,带验证)@age.setterdef age(self, value):# 验证:必须是整数,且在0~150之间if not isinstance(value, int):raise TypeError("年龄必须是整数!")if value < 0 or value > 150:raise ValueError("年龄必须在 0~150 之间!")self._age = value# 测试:正常情况
p1 = Person("张三", 25)
print(f"{p1.name} 的年龄:{p1.age}")# 测试:修改年龄(合法)
p1.age = 30
print(f"{p1.name} 修改后的年龄:{p1.age}")# 测试:非法情况(触发异常,可注释后运行)
# p2 = Person("李四", "20")  # 类型错误
# p3 = Person("王五", 200)   # 值错误

结果:
在这里插入图片描述

练习 11:自定义模块调用

需求:
创建自定义模块 “math_tools.py”,包含 “add(加法)、multiply(乘法)、is_prime(判断质数)” 三个函数
在主脚本中导入该模块,调用函数并测试

步骤 1:创建模块文件 “math_tools.py”

# math_tools.py(自定义模块)
def add(a, b):"""加法运算"""return a + bdef multiply(a, b):"""乘法运算"""return a * bdef is_prime(n):"""判断n是否为质数(质数:大于1的整数,仅能被1和自身整除)"""if n <= 1:return Falseif n == 2:return Trueif n % 2 == 0:return False# 检查3到sqrt(n)的奇数for i in range(3, int(n**0.5) + 1, 2):if n % i == 0:return Falsereturn True

步骤 2:主脚本调用模块

# 主脚本 main.py
# 导入自定义模块(三种方式任选)
import math_tools as mt
from math_tools import is_prime# 测试加法
print("3 + 5 =", mt.add(3, 5))# 测试乘法
print("4 × 6 =", mt.multiply(4, 6))# 测试质数判断
test_nums = [7, 12, 17, 20]
for num in test_nums:print(f"{num} 是质数吗?", is_prime(num))

结果:
在这里插入图片描述

练习 12:多线程与锁同步

需求:创建 3 个线程,共享 “计数器” 变量,每个线程对计数器累加 1000 次,用锁确保计数器最终结果正确(避免竞态条件)。

import threading
import time
num =0
lock = threading.Lock()def increment_counter(thread_name):global numfor _ in range(1000):with lock:num+=1time.sleep(0.001)print(f"线程 {thread_name} 执行完毕,当前计数器:{num}")thread1 = threading.Thread(target=increment_counter,args=("thread1",))
thread2 = threading.Thread(target=increment_counter,args=("thread2",))
thread3 = threading.Thread(target=increment_counter,args=("thread3",))thread1.start()
thread2.start()
thread3.start()# 等待所有线程结束
thread1.join()
thread2.join()
thread3.join()print(f"\n所有线程执行完毕,最终计数器:{num}")

结果:
在这里插入图片描述

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

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

相关文章

Motioncam Color S + 蓝激光:3D 视觉革新,重塑工业与科研应用新格局

在工业自动化、科研探索及智能检测等前沿领域&#xff0c;对物体进行高精度、高速度且稳定可靠的三维成像&#xff0c;始终是推动技术进步与效率提升的关键诉求。过往的 3D 成像设备&#xff0c;常因精度欠佳、对复杂材质适应性差、难以应对动态场景等局限&#xff0c;在实际应…

用html5写一个第一视角的摩托车开车游戏,画上摩托车把手,把手两侧放上可操控方向的按钮,再加上,前进和减速的按钮

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>第一视角摩托车</title><style>html…

SpringMVC 系列博客(一):基础概念与注解开发入门

目录 一、引言 二、MVC 模式&#xff1a;SpringMVC 的设计基石 2.1 MVC 三大组件 2.2 主流 MVC 框架对比 2.3 MVC 模式的核心优势 三、SpringMVC 框架&#xff1a;是什么&#xff1f;为什么学&#xff1f; 3.1 什么是 SpringMVC&#xff1f; 3.2 为什么要学 SpringMVC&a…

Java 字符串操作教程:三个任务完整复现与解析

这次是完成一些小任务来试试身手&#xff0c;免得生疏&#xff1a; 编写程序&#xff0c;使用charAt和length方法&#xff0c;将字符串"HelloWorld"拆分为"Hello"和"World"两个子串并输出。 设计一个方法&#xff0c;利用indexOf和lastlndexOf&a…

向量技术研究报告:从数学基础到AI革命的支柱

1. 向量的数学本质与历史演变 1.1 核心定义与数学表示 向量是同时具有大小&#xff08;Magnitude&#xff09;和方向&#xff08;Direction&#xff09;的量&#xff0c;在数学上被严格定义为向量空间中的元素。与仅有大小的标量&#xff08;Scalar&#xff09;不同&#xff0c…

Qt QHorizontalStackedBarSeries详解

1、概述QHorizontalStackedBarSeries 是 Qt Charts 模块中的一个类&#xff0c;用于创建水平堆叠条形图。它继承自 QAbstractBarSeries 类&#xff0c;允许将多个数据系列堆叠在一起显示&#xff0c;每个条形由多个部分组成&#xff0c;这些部分共同构成一个完整的条形&#xf…

《股票智能查询与投资决策辅助应用项目方案》

前引&#xff1a;本股票智能查询与投资决策辅助应用通过整合多源金融数据&#xff0c;运用量化分析 机器学习技术&#xff0c;为普通投资者提供全方位股票信息服务和个性化投资建议。系统不仅解决了传统工具 “数据分散、分析复杂” 的问题&#xff0c;更通过人性化交互和直观…

从零开始构建Kubernetes Operator:一个完整的深度学习训练任务管理方案

从零开始构建Kubernetes Operator&#xff1a;一个完整的深度学习训练任务管理方案一、引言二、为什么需要Operator&#xff1f;1. Controller vs Operator&#xff1a;本质区别2. 有状态服务 vs 无状态服务的挑战三、项目架构设计3.1整体架构图3.2核心组件4.核心实现解析1. CR…

第二十二篇|新世界语学院教育数据深度解析:学制函数、能力矩阵与升学图谱

第二十二篇&#xff5c;新世界语学院教育数据深度解析&#xff1a;学制函数、能力矩阵与升学图谱 系列主题&#xff1a;500所日本语言学校结构数据工程 关键词&#xff1a;新世界语学院、东京新宿、学制函数建模、JLPT能力矩阵、升学网络、教育数据工程 一、合规与法人建模&…

Java开发工具选择指南:Eclipse、NetBeans与IntelliJ IDEA对比

在Java开发的世界里&#xff0c;选择合适的开发工具就如同挑选一把称手的禅杖&#xff0c;能助你在代码修行的路上更加得心应手。本文将为Java开发者提供一份实用的IDE选择指南&#xff0c;从功能、适用人群、性能等方面深入解析几款主流的Java开发工具&#xff0c;帮助你找到最…

iOS App 内存泄漏与性能调优实战 如何排查内存问题、优化CPU与GPU性能、降低耗电并提升流畅度(uni-app iOS开发优化指南)

在 iOS 应用开发中&#xff0c;内存泄漏 是最常见且最难排查的性能问题之一。 它会导致应用 运行越来越卡、占用内存过高、频繁崩溃&#xff0c;甚至严重消耗电池。 尤其在 uni-app 跨平台开发 中&#xff0c;JS 层和原生层的混合调用更容易隐藏内存问题&#xff1a; 对象未释放…

从源代码开始构建、部署和管理应用程序

1.创建项目目录并准备应用程序的代码及其依赖1.创建项目目录&#xff0c;并将当前目录切换到该目录[roothost1 ~]# mkdir python-web && cd python-web2.创建 app.py 文件并添加以下代码[roothost1 python-web]# vi app.py [roothost1 python-web]# cat app.py import …

Flutter-[2]第一个应用

摘要 根据官方文档搭配好环境&#xff0c;使用vscode创建完应用后&#xff0c;会遇到以下问题 设备无法选择打开了lib\main.dart右上角也没有运行按钮 环境 Windows11Flutter 3.35.4 必要设置 1. 查看是否开启Windows桌面应用开发flutter config --list输出如下: All Settings:…

QListWidget选择阻止问题解决方案

QListWidget选择阻止问题解决方案QListWidget选择阻止问题解决方案问题背景QListWidget工作机制详解1. 事件处理流程2. 关键机制说明2.1 鼠标事件与信号的分离2.2 信号阻塞的局限性2.3 断开连接方法的问题问题的根本原因1. 异步事件处理2. 多层状态管理3. 事件优先级解决方案演…

TCL华星计划投建第8.6代印刷OLED产线

近日&#xff0c;TCL科技集团股份有限公司&#xff08;000100.SZ&#xff09;发布公告&#xff0c;公司、旗下子公司TCL华星与广州市人民政府、广州经济技术开发区管理委员会共同签署项目合作协议&#xff0c;拟共同出资于广州市建设一条月加工2290mm2620mm玻璃基板能力约2.25万…

MATLAB 时间序列小波周期分析

1. 文件结构 WaveletPeriod/ ├── main_wavelet_period.m % 一键运行 ├── wavelet_power_spectrum.m % 小波功率谱 显著性 ├── period_peak_detect.m % 自动周期峰值 ├── plot_wavelet_results.m % 时频图 周期图 └── example/└── temp.csv …

如何精准配置储

当电费账单变身利润引擎&#xff0c;您的企业是否做好了准备&#xff1f;鹧鸪云储能仿真软件&#xff0c;不止于仿真——我们以智能算法为核心&#xff0c;为企业定制“高收益、高适配、可持续”的储能配置方案&#xff0c;将用电数据转化为新一轮增长动能。智慧大脑&#xff1…

Uniapp崩溃监控体系构建:内存泄漏三维定位法(堆栈/资源/线程)

在Uniapp开发中&#xff0c;内存泄漏是导致应用崩溃的核心隐患。通过堆栈分析、资源追踪和线程监控三维定位法&#xff0c;可系统化定位泄漏源。以下是完整实施方案&#xff1a;一、堆栈维度&#xff1a;泄漏对象溯源内存快照比对使用Chrome DevTools定期获取内存快照&#xff…

NLP中Subword算法:WordPiece、BPE、BBPE、SentencePiece详解以及代码实现

本文将介绍以下内容&#xff1a; 1. Subword与传统tokenization技术的对比2. WordPiece3. Byte Pair Encoding (BPE)4. Byte-level BPE(BBPE)5. SentencePiece 以及各Subword算法代码实现 一、Subword与传统tokenization技术的对比 1. 传统tokenization技术 传统tokenizatio…

十一章 无界面压测

一、采用无界面压测的原因1.节约系统资源。 2.更快捷&#xff0c;只需要启动命令即可进行压测 3.主要是用于性能压测集成.无界面压测命令参数&#xff1a; -n 表示无界面压测 -t 制定你的 jmx 脚本 -l 生成 jtl 测试报告二、注意配置文件设置:输出为xml jmeter.save.s…