当前位置: 首页 > news >正文

「Python教案」通用序列操作

课程目标

1.知识目标

  1. 能够正确使用Python中通用序列操作,例如,索引、切片、连接、重复、成员检测、长度计算等。
  2. 能够正确将序列操作应用在实际数据处理的中场景。

2能力目标

  1. 能独立编写序列操作代码并进行调试,解决实际问题。
  2. 能对错误代码进行分析,并优化代码逻辑。

3思政目标

  1. 通过序列操作的严谨性,培养“细节决定成败”的工匠精神。
  2. 结合数据处理的实际应用,渗透“技术服务于社会”的职业责任感。

教学内容

1.通用序列操作类型

  1. 索引操作
  • 基本语法:sequence[index]
  • 支持正向索引和反向索引。正向索引,从左到右,从0开始。反向索引,从右到左,从-1开始。
  • 适用于字符串、列表、元组、字节等序列类型。
  • 示例:s = "Python" → s[0] → 'P's[-1] → 'n'
  1. 切片操作
  • 基本语法:sequence[start:stop:step]
  • 切片规则:start包含,stop不包含;步长为负时方向反转。
  • 步长为负时,start需大于stop,否则返回空序列。
  • 支持省略,例如,[:]获得整个序列;负步长,例如,[::-1]实现反转。
  • 适用于字符串、列表、元组、字节等序列类型。
  • 示例:lst = [1,2,3,4] → lst[1:3] → [2,3]s[::-1] → 'nohtyP'
  1. 连接操作
  • 基本语法:sequence1 + sequence2,要求两侧类型一致。
  • 适用于字符串、列表、元组(不可变类型需重新赋值)等序列类型。
  • 示例:[1,2] + [3,4] → [1,2,3,4]'Hello' + ' ' + 'World' → 'Hello World'
  1. 重复操作
  • 基本语法:sequence * n,要求右侧为整数。
  • 适用于字符串、列表、元组等序列类型。
  • 示例:'Hi' * 3 → 'HiHiHi'[0] * 5 → [0,0,0,0,0]
  1. 成员检测操作
  • 基本语法:value in sequence 或 value not in sequence,返回布尔值。
  • 适用于字符串、列表、元组等序列类型。
  • 示例:'a' in 'apple' → True5 not in [1,2,3] → True
  1. 长度计算
  • 基本语法:len(sequence),返回序列元素数量。
  • 在编写程序时使用len()验证索引范围。
  • 适用于字符串、列表、元组等序列类型。
  • 示例:len('Python') → 6len([]) → 0

2.多种类型序列的通用性验证

# 字符串
s = "Data"
print(s[1:3])  # 输出: 'at'
print('a' in s)  # 输出: True# 列表
lst = [10, 20, 30]
print(lst[1:3])  # 输出: [20, 30]
print(20 in lst)  # 输出: True# 元组
tup = (100, 200, 300)
print(tup[1:3])  # 输出: (200, 300)
print(400 not in tup)  # 输出: True

运行结果

atTrue[20, 30]True(200, 300)True进程已结束,退出代码为 0

说明:索引、切片、成员检测等操作在字符串、列表、元组中使用方法是一致的。

重点分析

难点分析

教学活动设计

概念引入

序列数据好比“超市货架”。

  1. 索引类似于货架编号,如第1层、第-1层。
  2. 切片类似于取连续商品,如“第2到第4层”。
  3. 连接类似于将多个货架合并。
  4. 重复类似于将货架中的货物复制多份。

示例:

fruits = ['apple', 'banana', 'cherry']
print(fruits[0])  # 索引:取第一个元素
print(fruits[-1])  # 反向索引:取最后一个元素
print(fruits[1:3])  # 切片:取索引1到2的元素

运行结果

applecherry['banana', 'cherry']进程已结束,退出代码为 0

索引与切片

s = "ABCDEFG"
for i in range(-len(s), len(s)):print(f"s[{i}] = {s[i] if 0 <= i < len(s) else 'Out of range'}")

运行结果

s[-7] = Out of ranges[-6] = Out of ranges[-5] = Out of ranges[-4] = Out of ranges[-3] = Out of ranges[-2] = Out of ranges[-1] = Out of ranges[0] = As[1] = Bs[2] = Cs[3] = Ds[4] = Es[5] = Fs[6] = G进程已结束,退出代码为 0

案例解析

案例:统计字符串中元音字母数量

text = "Python is powerful"
vowels = "aeiou"
count = sum(1 for char in text if char.lower() in vowels)
print(count)  # 输出:5

运行结果

5进程已结束,退出代码为 0

案例:列表切片反转

nums = [1, 2, 3, 4, 5]
reversed_nums = nums[::-1]
print(reversed_nums)  # 输出:[5, 4, 3, 2, 1]

运行结果

[5, 4, 3, 2, 1]进程已结束,退出代码为 0

案例:统计单词频率

text = "apple banana apple orange banana apple"
words = text.split()
word_counts = {}
for word in words:word_counts[word] = word_counts.get(word, 0) + 1
print(word_counts)  # 输出: {'apple': 3, 'banana': 2, 'orange': 1}

运行结果

{'apple': 3, 'banana': 2, 'orange': 1}进程已结束,退出代码为 0

常见错误

错误:索引越界

s = "Hi"
print(s[5])  # 抛出 IndexError

运行结果

Traceback (most recent call last):File "D:\PythonProject\test.py", line 2, in <module>print(s[5])  # 抛出 IndexError~^^^IndexError: string index out of range

解决方法使用try-exceptlen()动态检查。修改代码如下

s = "Hi"
index = 5
if 0 <= index < len(s):print(s[index])
else:print("索引超出范围")

运行结果

索引超出范围进程已结束,退出代码为 0

错误:类型不匹配

lst = [1, 2]
print(lst + "3")  # 抛出 TypeError(列表与字符串不可直接连接)

运行结果

Traceback (most recent call last):File "D:\PythonProject\test.py", line 2, in <module>print(lst + "3")  # 抛出 TypeError(列表与字符串不可直接连接)~~~~^~~~~TypeError: can only concatenate list (not "str") to list进程已结束,退出代码为 1

解决方法强制类型转换

lst = [1, 2]
print(str(lst) + "3")  # 输出: "[1, 2]3"

运行结果

[1, 2]3进程已结束,退出代码为 0

错误:切片步长为0

s = "abc"
print(s[::0])  # 抛出 ValueError(步长必须为非零整数)

运行结果

Traceback (most recent call last):File "D:\PythonProject\test.py", line 2, in <module>print(s[::0])  # 抛出 ValueError(步长必须为非零整数)~^^^^^ValueError: slice step cannot be zero进程已结束,退出代码为 1

错误:混淆+append()

lst = [1, 2]
lst + 3  # 抛出 TypeError(列表与整数不可直接连接)
lst.append(3)  # 正确:修改原列表

应用场景

场景:数据清洗,从日志中提取特定字段

log = "2025-05-01 INFO User logged in"
parts = log.split()  # 分割为列表
print(parts[1:3])  # 输出: ['INFO', 'User']

运行结果

['INFO', 'User']进程已结束,退出代码为 0

场景:字符串反转

print("Python"[::-1])  # 输出: "nohtyP"

运行结果

nohtyP进程已结束,退出代码为 0

场景:列表重复与扩展

print([1, 2, 3] * 3)  # 输出: [1, 2, 3, 1, 2, 3, 1, 2, 3]

运行结果

[1, 2, 3, 1, 2, 3, 1, 2, 3]进程已结束,退出代码为 0

课堂练习

练习:从字符串"Hello World"中提取"World"

答案:text[6:11]

练习:将列表[1, 2, 3]重复3次并连接成字符串。

答案:str([1, 2, 3] * 3)[1:-1],输出:"1, 2, 3, 1, 2, 3, 1, 2, 3"

练习:从version字符串"Python3.8"中提取版本号"3.8"

答案:version = s[6:]

练习:用切片将result列表[0, 1, 2, 3, 4, 5]转换为[5, 3, 1]

答案:result = lst[5::-2]

课后作业

作业:用切片反转元组(10, 20, 30, 40)。

答案:tuple_reversed = (10, 20, 30, 40)[::-1]

作业:编写程序,统计字符串中每个字符的出现次数,要求忽略大小写。

s = "hello python"
s = s.lower()
char_count = {}
for char in s:if char.isalpha():  # 仅统计字母char_count[char] = char_count.get(char, 0) + 1
print(char_count)

运行结果

{'h': 2, 'e': 1, 'l': 2, 'o': 2, 'p': 1, 'y': 1, 't': 1, 'n': 1}进程已结束,退出代码为 0

作业:编写程序,将字符串中的元音字母替换为'*'

s = "Hello Python Programming"
vowels = "aeiouAEIOU"
print( ''.join(['*' if c in vowels else c for c in s]))

运行结果

H*ll* Pyth*n Pr*gr*mm*ng进程已结束,退出代码为 0

考核设计

1过程性考核(40%)

  1. 课堂练习的完成程度(20%)
  2. 编写代码的规范性与添加注释的规范性(10%)
  3. 参与小组讨论和解决问题的能力(10%)

2终结性考核(60%)

  1. 理论测试(20%):选择题。
  2. 综合项目(40%):学生成绩管理系统。

综合项目:学生成绩管理系统,要求使用列表的基本操作实现以下功能:

  1. 创建一个空列表存储学生成绩
  2. 添加5个学生成绩(成绩为0-100的整数)
  3. 计算并输出平均成绩
  4. 找出并输出最高分和最低分
  5. 将成绩从高到低排序并输出
  6. 检查是否有成绩等于100分
  7. 将及格成绩(≥60)筛选出来存入新列表
# 1. 创建空列表
scores = []# 2. 添加5个学生成绩
scores.append(85)
scores.append(92)
scores.append(78)
scores.append(60)
scores.append(100)# 3. 计算平均成绩
average = sum(scores) / len(scores)
print(f"平均成绩: {average:.1f}")# 4. 找出最高分和最低分
max_score = max(scores)
min_score = min(scores)
print(f"最高分: {max_score}, 最低分: {min_score}")# 5. 成绩从高到低排序
sorted_scores = sorted(scores, reverse=True)
print("成绩排序:", sorted_scores)# 6. 检查是否有满分
has_full_score = 100 in scores
print("是否有满分:", "有" if has_full_score else "无")# 7. 筛选及格成绩
passing_scores = [score for score in scores if score >= 60]
print("及格成绩:", passing_scores)

运行结果

平均成绩: 83.0最高分: 100, 最低分: 60成绩排序: [100, 92, 85, 78, 60]是否有满分: 有及格成绩: [85, 92, 78, 60, 100]进程已结束,退出代码为 0

http://www.xdnf.cn/news/689311.html

相关文章:

  • 股指期货的基差跟升贴水概念
  • 力扣-找到字符串中所有字母异位符
  • JDBC+HTML+AJAX实现登陆和单表的CRUD
  • 互联网大厂Java求职面试:AI大模型推理服务性能优化与向量数据库分布式检索
  • linux 性能优化-内存
  • windows安装启动elasticsearch
  • Linux之高效文本编辑利器 —— vim
  • 家用热水器用户行为分析与事件识别
  • 微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理
  • nt!CcGetVacbMiss函数分析之设置好nt!_VACB然后调用函数nt!SetVacb
  • LiveWallpaperMacOS:让你的 Mac 桌面动起来
  • Mac完美终端(iterm2 + oh my zash + tmux+ControlMaster)
  • Axure项目实战:运输统计页引入echarts实现高保真设计(JS代码ctrl+c ctrl+v懂得来)
  • OpenHarmony定制系统组合按键(二)
  • Pytest 是什么
  • 进阶知识:Selenium底层原理深度解析
  • Grafana-Gauge仪表盘
  • 5.28 后端面经
  • docker部署redis mysql nacos seata rabbitmq minio onlyoffice nginx实战
  • 20250528-C#知识:枚举
  • 20250528-C#知识:结构体
  • C# Socket对象创建方式详解
  • C接口 中文字符问题
  • 针对C++开发工具推荐及分析(涵盖IDE、编译器、调试工具和辅助工具)
  • 电脑开机后出现bootmgr is conmpressed原因及解决方法
  • 【Redis】基本架构
  • Dockerfile 构建优化的方法
  • 智变与重构:AI 赋能基础教育教学的范式转型研究报告
  • 理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
  • 第八天:面向对象编程