目录
嘿,朋友们!👋
我是你们的学习伙伴,继续带着大家探索Python的奇妙世界!昨天我们深入学习了函数的参数和递归函数,今天我们要探索Python中两个非常实用且强大的特性:切片和迭代。
如果你觉得我的讲解方式对你有帮助,或者喜欢我这种"把复杂变简单"的教学风格,欢迎来我的小窝坐坐~
我的技术博客:python全栈蛇行者-优快云博客
那里有更多精心整理的学习笔记、实战项目,还有我在学习中踩过的坑和总结的经验。
专栏订阅也不容错过哦!我会持续更新这个Python全栈系列,从基础到实战,手把手带你走进编程的世界。订阅之后,新文章会第一时间推送到你面前,再也不用担心错过精彩内容啦!
好啦,让我们开始今天的学习之旅吧!
一、切片——序列的"精密切割刀"
1.1 什么是切片?
切片是Python中一种强大而优雅的操作,它允许我们从序列(如字符串、列表、元组)中提取指定的部分。就像切蛋糕一样,我们可以精确地选择想要的部分。
生活中的类比:
-
🍰 切蛋糕:选择第2块到第5块
-
📚 读书:阅读第50页到第100页
-
🎵 播放列表:播放第3首到第10首歌曲
1.2 切片的基本语法
切片的基本语法非常简单:
序列[开始位置:结束位置:步长]
让我们通过简单的例子来理解:
# 创建一个简单的列表
fruits = ['苹果', '香蕉', '橙子', '葡萄', '西瓜', '芒果', '草莓']
print("原始水果列表:", fruits)
# 基础切片示例
print("\n=== 基础切片示例 ===")
print("前3个水果:", fruits[0:3]) # 索引0到2(不包括3)
print("第2到第4个水果:", fruits[1:4]) # 索引1到3
print("从第3个开始的所有水果:", fruits[2:]) # 索引2到最后
print("到第4个为止的水果:", fruits[:4]) # 开始到索引3
# 使用负数索引
print("\n=== 使用负数索引 ===")
print("最后3个水果:", fruits[-3:]) # 最后3个元素
print("除了最后2个的所有水果:", fruits[:-2]) # 开始到倒数第3个
print("从倒数第4个到倒数第2个:", fruits[-4:-1]) # 倒数第4个到倒数第2个
1.3 步长的魔力
步长让我们可以跳跃式地选择元素:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("原始数字列表:", numbers)
print("\n=== 步长示例 ===")
print("所有偶数:", numbers[::2]) # 步长为2,选择偶数索引
print("所有奇数:", numbers[1::2]) # 从索引1开始,步长为2
print("每隔3个选一个:", numbers[::3]) # 步长为3
print("反向列表:", numbers[::-1]) # 步长为-1,反转列表
print("反向选择偶数:", numbers[::-2]) # 反向步长为2
1.4 字符串切片
切片同样适用于字符串:
text = "Python编程很有趣!"
print("原始文本:", text)
print("\n=== 字符串切片示例 ===")
print("前5个字符:", text[:5]) # "Python"
print("第6到第8个字符:", text[5:8]) # "编程"
print("最后3个字符:", text[-3:]) # "很有趣!"
print("反转字符串:", text[::-1]) # "!趣很有编程nohtyP"
print("每隔一个字符:", text[::2]) # "Pto编很趣"
二、切片的进阶技巧
2.1 多维序列切片
对于嵌套列表(二维列表),我们可以进行更复杂的切片操作:
# 创建一个3x3的矩阵
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print("原始矩阵:")
for row in matrix:
print(row)
print("\n=== 多维切片示例 ===")
# 选择前两行
print("前两行:", matrix[:2])
# 选择每行的前两个元素
print("每行的前两个元素:")
for row in matrix:
print(row[:2])
# 选择特定的子矩阵(前两行的前两列)
print("子矩阵(前两行前两列):")
sub_matrix = [row[:2] for row in matrix[:2]]
for row in sub_matrix:
print(row)
2.2 切片的实际应用场景
# 场景1:数据处理 - 分页显示
def paginate_data(data, page_num, page_size=5):
"""
数据分页函数
参数:
data: 原始数据列表
page_num: 页码(从1开始)
page_size: 每页大小
返回:
指定页的数据
"""
start_index = (page_num - 1) * page_size
end_index = start_index + page_size
return data[start_index:end_index]
# 测试数据
user_data = [f"用户{i}" for i in range(1, 21)] # 生成20个用户
print("所有用户数据:", user_data)
print("\n=== 分页显示 ===")
print("第1页:", paginate_data(user_data, 1))
print("第2页:", paginate_data(user_data, 2))
print("第3页:", paginate_data(user_data, 3))
# 场景2:文本处理 - 提取关键信息
def extract_email_local_part(email):
"""
提取邮箱的本地部分(@之前的部分)
"""
return email.split('@')[0]
def process_emails(emails):
"""
批量处理邮箱列表
"""
# 只处理前5个邮箱,提取本地部分
local_parts = [extract_email_local_part(email) for email in emails[:5]]
return local_parts
# 测试邮箱列表
email_list = [
"alice@example.com",
"bob@gmail.com",
"charlie@outlook.com",
"david@yahoo.com",
"eve@hotmail.com",
"frank@icloud.com"
]
print("\n=== 邮箱处理 ===")
print("前5个邮箱的本地部分:", process_emails(email_list))
2.3 切片的高级技巧
# 技巧1:使用切片修改列表部分元素
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("原始列表:", numbers)
# 修改中间部分
numbers[3:7] = [40, 50, 60, 70]
print("修改中间部分后:", numbers)
# 技巧2:使用切片插入元素
numbers = [1, 2, 3, 4, 5]
print("\n原始列表:", numbers)
# 在索引2处插入多个元素
numbers[2:2] = [20, 30, 40] # 注意:开始和结束都是2,表示插入位置
print("插入元素后:", numbers)
# 技巧3:使用切片删除元素
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("\n原始列表:", numbers)
# 删除索引3到6的元素
numbers[3:7] = []
print("删除部分元素后:", numbers)
# 更简单的删除方式
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del numbers[3:7]
print("使用del删除后:", numbers)
三、迭代——遍历的艺术
3.1 什么是迭代?
迭代是编程中处理集合数据的核心概念。在Python中,迭代意味着逐个访问序列中的元素。
生活中的迭代:
-
📖 读书:一页一页地阅读
-
🎵 听歌:一首一首地播放
-
🛒 购物:一件一件地把商品放入购物车
3.2 基础迭代:for循环
# 最基本的迭代:遍历列表
fruits = ['苹果', '香蕉', '橙子', '葡萄']
print("=== 基础for循环迭代 ===")
print("水果列表:")
for fruit in fruits:
print(f" - {fruit}")
# 获取索引的迭代
print("\n=== 带索引的迭代 ===")
for index, fruit in enumerate(fruits):
print(f"第{index}个水果: {fruit}")
# 从指定索引开始
print("\n=== 从指定索引开始 ===")
for index, fruit in enumerate(fruits, start=1):
print(f"水果 #{index}: {fruit}")
3.3 字符串迭代
text = "Python"
print("=== 字符串迭代 ===")
print("逐个字符:")
for char in text:
print(f" '{char}'")
print("\n带索引的字符:")
for i, char in enumerate(text):
print(f" 位置{i}: '{char}'")
# 统计字符出现次数
sentence = "hello world"
char_count = {}
for char in sentence:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
print(f"\n字符统计: {char_count}")
3.4 字典迭代
字典的迭代有多种方式:
student = {
'name': '张三',
'age': 18,
'grade': '三年级',
'city': '北京'
}
print("=== 字典迭代 ===")
# 迭代键
print("所有键:")
for key in student:
print(f" {key}")
# 显式迭代键
print("\n显式迭代键:")
for key in student.keys():
print(f" {key}")
# 迭代值
print("\n所有值:")
for value in student.values():
print(f" {value}")
# 迭代键值对
print("\n键值对:")
for key, value in student.items():
print(f" {key}: {value}")
四、迭代的进阶应用
4.1 嵌套迭代
# 嵌套列表的迭代
classroom = [
['张三', '李四', '王五'],
['赵六', '钱七', '孙八'],
['周九', '吴十', '郑十一']
]
print("=== 嵌套列表迭代 ===")
print("教室座位表:")
for row_index, row in enumerate(classroom):
print(f"第{row_index + 1}排: ", end="")
for col_index, student in enumerate(row):
print(f"{student}({col_index + 1}列) ", end="")
print() # 换行
# 更清晰的显示方式
print("\n=== 清晰的座位表 ===")
for row_index, row in enumerate(classroom, 1):
print(f"第{row_index}排:")
for col_index, student in enumerate(row, 1):
print(f" 第{col_index}列: {student}")
4.2 条件迭代
numbers = [15, 23, 8, 42, 4, 16, 91, 7, 33]
print("原始数字:", numbers)
print("\n=== 条件迭代 ===")
# 只迭代偶数
print("偶数:")
for num in numbers:
if num % 2 == 0:
print(f" {num}")
# 使用continue跳过某些元素
print("\n大于10的数字:")
for num in numbers:
if num <= 10:
continue # 跳过小于等于10的数字
print(f" {num}")
# 使用break提前终止迭代
print("\n遇到第一个大于40的数字就停止:")
for num in numbers:
if num > 40:
print(f" 找到第一个大于40的数字: {num}")
break
print(f" 检查: {num}")
4.3 zip()函数:并行迭代
names = ['张三', '李四', '王五', '赵六']
ages = [18, 19, 17, 20]
grades = [85, 92, 78, 96]
print("=== 并行迭代 ===")
print("学生信息:")
for name, age, grade in zip(names, ages, grades):
print(f" 姓名: {name}, 年龄: {age}, 成绩: {grade}分")
# 创建字典列表
print("\n=== 创建学生字典 ===")
students = []
for name, age, grade in zip(names, ages, grades):
student = {
'name': name,
'age': age,
'grade': grade
}
students.append(student)
print(f" 添加: {student}")
print("\n完整学生列表:", students)
五、切片与迭代的结合应用
5.1 数据处理实战
# 模拟销售数据
sales_data = [
('2024-01-01', '手机', 1500, 25),
('2024-01-01', '电脑', 4500, 12),
('2024-01-02', '手机', 1500, 30),
('2024-01-02', '电脑', 4500, 8),
('2024-01-03', '手机', 1500, 18),
('2024-01-03', '平板', 2800, 15),
('2024-01-04', '手机', 1500, 22),
('2024-01-04', '电脑', 4500, 10)
]
print("=== 销售数据分析 ===")
print("原始数据条数:", len(sales_data))
# 使用切片获取最近3天的数据
recent_data = sales_data[-6:] # 每天2条记录,3天就是6条
print("\n最近3天数据:")
for record in recent_data:
print(f" {record}")
# 分析手机销售情况
print("\n=== 手机销售分析 ===")
phone_sales = [record for record in sales_data if record[1] == '手机']
print(f"手机销售记录数: {len(phone_sales)}")
total_phone_revenue = 0
for date, product, price, quantity in phone_sales:
revenue = price * quantity
total_phone_revenue += revenue
print(f" {date}: 售出{quantity}台,收入{revenue}元")
print(f"手机总销售收入: {total_phone_revenue}元")
5.2 文本处理实战
def analyze_text(text, keyword):
"""
分析文本,找到包含关键词的句子
参数:
text: 待分析的文本
keyword: 关键词
返回:
包含关键词的句子列表
"""
# 将文本分割成句子(简单分割)
sentences = text.split('。')
# 找到包含关键词的句子
matching_sentences = []
for sentence in sentences:
if keyword in sentence:
# 清理句子并添加到结果中
clean_sentence = sentence.strip()
if clean_sentence: # 确保不是空字符串
matching_sentences.append(clean_sentence)
return matching_sentences
# 测试文本
sample_text = """
Python是一种强大的编程语言。它简单易学,功能丰富。
Python在数据科学领域应用广泛。很多公司使用Python进行数据分析。
机器学习也是Python的重要应用领域。Python拥有丰富的库支持。
学习Python编程很有趣。Python社区非常活跃。
"""
print("=== 文本分析 ===")
keyword = "Python"
results = analyze_text(sample_text, keyword)
print(f"包含关键词 '{keyword}' 的句子:")
for i, sentence in enumerate(results, 1):
print(f"{i}. {sentence}")
print(f"\n共找到 {len(results)} 个相关句子")
# 使用切片显示前3个结果
if len(results) > 3:
print("\n前3个相关句子:")
for i, sentence in enumerate(results[:3], 1):
print(f"{i}. {sentence}")
六、实战演示——综合应用案例
6.1 实战项目一:学生成绩分析系统
# 学生成绩分析系统
def display_system_header():
"""显示系统标题"""
print("🎓" * 50)
print(" 学生成绩分析系统")
print("🎓" * 50)
def generate_sample_data():
"""生成示例学生数据"""
students = []
# 使用循环生成样本数据
names = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十']
classes = ['一班', '二班', '三班']
for i, name in enumerate(names):
student = {
'id': f'2024{1000 + i}',
'name': name,
'class': classes[i % len(classes)],
'grades': {
'语文': 60 + (i * 3) % 40,
'数学': 70 + (i * 5) % 30,
'英语': 65 + (i * 7) % 35,
'物理': 75 + (i * 2) % 25,
'化学': 80 + (i * 4) % 20
}
}
students.append(student)
return students
def calculate_average(grades):
"""计算平均分"""
return sum(grades.values()) / len(grades)
def show_all_students(students):
"""显示所有学生信息"""
print("\n=== 所有学生信息 ===")
print("学号\t\t姓名\t班级\t平均分")
print("-" * 50)
for student in students:
avg_grade = calculate_average(student['grades'])
print(f"{student['id']}\t{student['name']}\t{student['class']}\t{avg_grade:.1f}")
def show_top_students(students, top_n=3):
"""显示前N名优秀学生"""
print(f"\n=== 前{top_n}名优秀学生 ===")
# 计算每个学生的平均分
students_with_avg = []
for student in students:
avg_grade = calculate_average(student['grades'])
students_with_avg.append((student, avg_grade))
# 按平均分降序排序
students_with_avg.sort(key=lambda x: x[1], reverse=True)
# 显示前N名
for i, (student, avg_grade) in enumerate(students_with_avg[:top_n], 1):
print(f"第{i}名: {student['name']} ({student['class']}) - 平均分: {avg_grade:.1f}")
def analyze_by_class(students):
"""按班级分析成绩"""
print("\n=== 班级成绩分析 ===")
# 按班级分组
class_grades = {}
for student in students:
class_name = student['class']
avg_grade = calculate_average(student['grades'])
if class_name not in class_grades:
class_grades[class_name] = []
class_grades[class_name].append(avg_grade)
# 分析每个班级
for class_name, grades in class_grades.items():
avg_class_grade = sum(grades) / len(grades)
max_grade = max(grades)
min_grade = min(grades)
print(f"{class_name}:")
print(f" 平均分: {avg_class_grade:.1f}")
print(f" 最高分: {max_grade:.1f}")
print(f" 最低分: {min_grade:.1f}")
print(f" 学生人数: {len(grades)}")
def find_students_by_grade_range(students, min_grade=80):
"""查找成绩优秀的学生"""
print(f"\n=== 平均分 ≥ {min_grade} 的优秀学生 ===")
excellent_students = []
for student in students:
avg_grade = calculate_average(student['grades'])
if avg_grade >= min_grade:
excellent_students.append((student, avg_grade))
if excellent_students:
for student, avg_grade in excellent_students:
print(f"{student['name']} ({student['class']}) - 平均分: {avg_grade:.1f}")
else:
print("暂无符合条件的学生")
def run_analysis_system():
"""运行分析系统"""
display_system_header()
# 生成样本数据
students = generate_sample_data()
print(f"已生成 {len(students)} 名学生的数据")
while True:
print("\n" + "="*50)
print("请选择分析功能:")
print("1. 显示所有学生")
print("2. 显示优秀学生排名")
print("3. 班级成绩分析")
print("4. 查找优秀学生")
print("5. 退出系统")
print("="*50)
choice = input("请输入选择 (1-5): ").strip()
if choice == '1':
show_all_students(students)
elif choice == '2':
show_top_students(students)
elif choice == '3':
analyze_by_class(students)
elif choice == '4':
try:
min_grade = float(input("请输入最低平均分 (默认80): ") or 80)
find_students_by_grade_range(students, min_grade)
except ValueError:
print("❌ 请输入有效的数字!")
elif choice == '5':
print("\n感谢使用学生成绩分析系统!")
break
else:
print("❌ 无效的选择,请重新输入!")
# 启动系统
if __name__ == "__main__":
run_analysis_system()
6.2 实战项目二:文件内容分析工具
# 文件内容分析工具(模拟)
def simulate_file_content():
"""模拟文件内容"""
lines = [
"Python是一种高级编程语言。",
"它由Guido van Rossum创建。",
"Python以简洁的语法著称。",
"它支持多种编程范式。",
"Python在Web开发中很流行。",
"数据科学也大量使用Python。",
"机器学习项目常用Python。",
"Python拥有丰富的第三方库。",
"学习Python对职业发展有帮助。",
"Python社区非常活跃和友好。",
"Python的文档很完善。",
"很多大学用Python教学。",
"Python是开源的。",
"它可以在多种操作系统上运行。",
"Python的生态系统很强大。"
]
return lines
def analyze_file_content(lines, keyword=None):
"""分析文件内容"""
print(f"\n=== 文件内容分析 ===")
print(f"总行数: {len(lines)}")
if keyword:
print(f"关键词: '{keyword}'")
# 基本统计
total_chars = sum(len(line) for line in lines)
total_words = sum(len(line.split()) for line in lines)
print(f"总字符数: {total_chars}")
print(f"总单词数: {total_words}")
print(f"平均每行字符数: {total_chars/len(lines):.1f}")
print(f"平均每行单词数: {total_words/len(lines):.1f}")
# 关键词搜索
if keyword:
matching_lines = []
for line_num, line in enumerate(lines, 1):
if keyword in line:
matching_lines.append((line_num, line))
print(f"\n包含关键词 '{keyword}' 的行:")
if matching_lines:
for line_num, line in matching_lines:
print(f" 第{line_num}行: {line.strip()}")
else:
print(" 未找到包含关键词的行")
def show_file_preview(lines, preview_lines=5):
"""显示文件预览"""
print(f"\n=== 文件预览 (前{preview_lines}行) ===")
for i, line in enumerate(lines[:preview_lines], 1):
print(f"{i:2d}. {line}")
def show_file_slices(lines):
"""显示文件的不同切片"""
print("\n=== 文件切片分析 ===")
total_lines = len(lines)
# 显示开头部分
print(f"前5行:")
for i, line in enumerate(lines[:5], 1):
print(f" {i}. {line}")
# 显示中间部分
if total_lines > 10:
middle_start = total_lines // 2 - 2
middle_end = total_lines // 2 + 2
print(f"\n中间部分 ({middle_start+1}-{middle_end}行):")
for i, line in enumerate(lines[middle_start:middle_end], middle_start+1):
print(f" {i}. {line}")
# 显示结尾部分
print(f"\n最后5行:")
for i, line in enumerate(lines[-5:], total_lines-4):
print(f" {i}. {line}")
def run_file_analyzer():
"""运行文件分析工具"""
print("📁" * 50)
print(" 文件内容分析工具")
print("📁" * 50)
# 模拟文件内容
file_content = simulate_file_content()
print(f"已加载模拟文件,共 {len(file_content)} 行")
while True:
print("\n" + "="*50)
print("请选择功能:")
print("1. 显示文件预览")
print("2. 完整内容分析")
print("3. 关键词搜索")
print("4. 切片分析")
print("5. 退出工具")
print("="*50)
choice = input("请输入选择 (1-5): ").strip()
if choice == '1':
show_file_preview(file_content)
elif choice == '2':
analyze_file_content(file_content)
elif choice == '3':
keyword = input("请输入要搜索的关键词: ").strip()
if keyword:
analyze_file_content(file_content, keyword)
else:
print("❌ 关键词不能为空!")
elif choice == '4':
show_file_slices(file_content)
elif choice == '5':
print("\n感谢使用文件内容分析工具!")
break
else:
print("❌ 无效的选择,请重新输入!")
# 启动文件分析工具
if __name__ == "__main__":
run_file_analyzer()
七、每日一题:图书管理系统
题目要求
创建一个图书管理系统,要求实现以下功能:
系统功能需求
-
图书信息管理
-
添加图书信息(书号、书名、作者、出版社、出版年份)
-
显示所有图书信息
-
根据书名或作者查找图书
-
-
图书分类功能
-
按出版社分类显示图书
-
按出版年份范围筛选图书
-
统计各类图书数量
-
-
高级功能
-
显示最新出版的图书
-
查找某个作者的所有作品
-
图书信息排序(按书名、年份等)
-
技术要求
必须使用切片和迭代实现以下功能:
-
display_library_header()- 显示系统标题 -
show_main_menu()- 显示主菜单 -
add_book(books)- 添加图书 -
show_all_books(books)- 显示所有图书 -
find_books(books)- 查找图书(支持书名和作者) -
show_books_by_publisher(books)- 按出版社分类显示 -
filter_books_by_year(books)- 按年份筛选 -
show_latest_books(books, count=5)- 显示最新图书 -
find_books_by_author(books)- 查找作者作品 -
sort_books(books)- 图书排序 -
main()- 主函数
数据结构建议
# 每本图书用字典表示
book = {
'isbn': '978-7-04-052123-4',
'title': 'Python编程从入门到实践',
'author': '埃里克·马瑟斯',
'publisher': '人民邮电出版社',
'year': 2020
}
# 所有图书存储在列表中
books = [book1, book2, book3, ...]
示例交互
📚 ================================ 📚
图书管理系统
📚 ================================ 📚
请选择操作:
1. 添加图书
2. 显示所有图书
3. 查找图书
4. 按出版社分类
5. 按年份筛选
6. 显示最新图书
7. 查找作者作品
8. 图书排序
9. 退出系统
请输入您的选择 (1-9):
评分标准
基础要求(必须完成):
-
所有功能都使用切片和迭代实现
-
能够添加和显示图书信息
-
实现基本的查找和筛选功能
-
使用适当的循环和条件语句
进阶要求(加分项):
-
使用多种切片技巧(步长、负数索引等)
-
实现复杂的迭代模式(嵌套迭代、条件迭代等)
-
添加数据验证和错误处理
-
代码结构清晰,有良好的注释
提示
-
切片应用场景:
-
显示最新图书:
books[-count:] -
分页显示:
books[start:end] -
反向显示:
books[::-1]
-
-
迭代应用场景:
-
遍历所有图书
-
按条件筛选图书
-
统计图书信息
-
-
可以先使用示例数据测试:
sample_books = [
{
'isbn': '9787115546081',
'title': 'Python编程:从入门到实践',
'author': '埃里克·马瑟斯',
'publisher': '人民邮电出版社',
'year': 2020
},
{
'isbn': '9787302518002',
'title': '流畅的Python',
'author': '卢西亚诺·拉马略',
'publisher': '人民邮电出版社',
'year': 2021
},
{
'isbn': '9787121411820',
'title': 'Python数据科学手册',
'author': '杰克·万托布拉斯',
'publisher': '电子工业出版社',
'year': 2022
}
]
请根据上述要求,使用今天学习的切片和迭代知识完成这个图书管理系统的开发。注意充分利用切片的灵活性和迭代的强大功能!
八、结语
今天的内容真是太丰富了!我们从基础的切片操作开始,探索了各种切片技巧,然后深入学习了迭代的多种模式,最后通过实战项目巩固了所学知识。
今天的学习要点总结:
-
切片操作 - 序列的精密切割
-
基础切片:
sequence[start:end] -
步长切片:
sequence[start:end:step] -
负数索引:从末尾开始计数
-
切片修改:替换、插入、删除元素
-
-
迭代技术 - 遍历的艺术
-
基础for循环:遍历序列元素
-
enumerate():获取元素索引
-
字典迭代:keys()、values()、items()
-
条件迭代:使用continue和break
-
并行迭代:zip()函数
-
-
实战应用
-
数据处理和分析
-
文本处理和搜索
-
系统开发和工具创建
-
切片和迭代是Python编程中无处不在的技术,它们让我们的代码更加简洁、高效和易读。掌握这些技术,你就能更好地处理各种数据集合,写出更Pythonic的代码!
记住编程学习的黄金法则:多动手、多思考、多总结。不要只是阅读代码,一定要亲自编写和测试。每个错误都是进步的机会,每个挑战都是成长的阶梯。
如果你在练习中遇到问题,或者有什么不明白的地方,欢迎来我的博客留言讨论。我们一起学习,一起进步!
下次见啦,继续加油!💪
3215

被折叠的 条评论
为什么被折叠?



