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

Python快速入门专业版(二十三):for循环基础:遍历字符串、列表与range()函数(计数案例)

在这里插入图片描述

目录

  • 一、for循环的核心作用与语法
    • 1. 基本语法结构
    • 2. 执行流程
    • 3. 简单示例:遍历打印列表元素
  • 二、遍历字符串:逐个访问字符
    • 1. 基本用法:遍历字符串中的每个字符
    • 2. 应用示例:统计字符串中某个字符的出现次数
    • 3. 注意事项
  • 三、遍历列表:处理序列元素
    • 1. 遍历普通列表(元素为同一类型)
    • 2. 遍历混合类型列表
    • 3. 遍历列表时获取索引
  • 四、range()函数:生成数字序列
    • 1. range()函数的三种语法形式
    • 2. 代码演示:三种形式的range()
    • 3. 常见问题:range()生成的是"序列"而非"列表"
  • 五、for循环中的缩进与代码块
    • 1. 正确缩进示例
    • 2. 错误缩进示例(缩进缺失)
    • 3. 错误缩进示例(缩进不一致)
    • 4. 缩进注意事项
  • 六、综合案例:1到100的求和
    • 1. 案例分析
    • 2. 代码实现
    • 3. 执行过程解析
    • 4. 拓展:计算1到100的偶数和
  • 七、for循环的常见应用场景
  • 八、总结与练习
      • 练习题目(从易到难)

在编程中,我们经常需要对一组数据逐个进行处理——比如逐个查看字符串中的字符、计算列表中所有数字的和、重复执行某段代码固定次数等。如果手动编写每一次操作的代码,不仅效率低下,还会让程序变得冗长。Python的for循环正是为解决这类"重复操作"而生,它能自动遍历序列中的每个元素,高效执行重复逻辑。

本文将从for循环的基本语法讲起,通过实例详细讲解如何遍历字符串、列表等可迭代对象,重点介绍range()函数的用法,并通过"1到100的求和"案例巩固所学知识,帮助你掌握for循环的基础应用。

一、for循环的核心作用与语法

for循环是Python中用于遍历可迭代对象的循环语句。所谓"可迭代对象",指的是那些包含多个元素、可以逐个取出元素的对象(如字符串、列表、元组等)。for循环的核心功能就是依次取出这些元素,对每个元素执行相同的操作。

1. 基本语法结构

for 变量 in 可迭代对象:循环体(对每个元素执行的操作)
  • 变量:每次循环时,从可迭代对象中取出的元素会临时存储到这个变量中,供循环体使用。变量名可以自定义(遵循Python命名规则),建议取有意义的名字(如遍历字符时用char,遍历数字时用num)。
  • 可迭代对象:包含多个元素的对象,如字符串、列表、range()生成的序列等。
  • 循环体:需要重复执行的代码块,必须缩进(通常为4个空格),表示这部分代码属于for循环的一部分。
  • 冒号::用于标记可迭代对象的结束,必须放在可迭代对象之后。

2. 执行流程

  1. 从可迭代对象中取出第一个元素,赋值给变量。
  2. 执行缩进的循环体代码。
  3. 从可迭代对象中取出下一个元素,赋值给变量。
  4. 重复步骤2和3,直到可迭代对象中的所有元素都被取完,循环结束。

3. 简单示例:遍历打印列表元素

# 定义一个包含3个数字的列表
numbers = [10, 20, 30]# for循环遍历列表
for num in numbers:print(f"当前元素:{num}")

执行过程解析

  • 第一次循环:取出列表第一个元素10,赋值给num,执行print输出"当前元素:10"。
  • 第二次循环:取出第二个元素20,赋值给num,输出"当前元素:20"。
  • 第三次循环:取出第三个元素30,赋值给num,输出"当前元素:30"。
  • 列表中没有更多元素,循环结束。

输出结果:

当前元素:10
当前元素:20
当前元素:30

二、遍历字符串:逐个访问字符

字符串是Python中最常见的可迭代对象之一,它由多个字符组成,for循环可以逐个取出这些字符进行处理。

1. 基本用法:遍历字符串中的每个字符

# 定义一个字符串
message = "Hello"# for循环遍历字符串
for char in message:print(char)

输出结果:

H
e
l
l
o

解析:字符串"Hello"包含5个字符('H''e''l''l''o'),for循环依次取出每个字符赋值给char,并打印出来。

2. 应用示例:统计字符串中某个字符的出现次数

需求:统计字符串"Python is powerful, Python is easy"中字母'P'出现的次数。

# 目标字符串
text = "Python is powerful, Python is easy"# 初始化计数器
count = 0# 遍历字符串中的每个字符
for char in text:# 如果当前字符是'P',计数器加1if char == 'P':count += 1# 打印结果
print(f"字母'P'出现了{count}次")

输出结果:

字母'P'出现了2次

解析:通过for循环逐个检查字符串中的每个字符,每当遇到'P'就将计数器count加1,最终得到'P'出现的总次数。

3. 注意事项

  • 遍历字符串时,变量每次获取的是单个字符(字符串类型),即使字符是数字(如"123"中的'1'仍是字符类型)。
  • 空字符串("")遍历后不会执行循环体(因为没有元素)。

三、遍历列表:处理序列元素

列表是Python中最常用的数据结构之一,它可以存储多个不同类型的元素。for循环遍历列表的操作与遍历字符串类似,但列表元素可以是数字、字符串、甚至其他列表等。

1. 遍历普通列表(元素为同一类型)

# 定义一个包含成绩的列表
scores = [85, 92, 78, 90, 88]# 遍历列表,计算总分
total = 0
for score in scores:total += score  # 累加每个成绩到总分# 计算平均分(列表长度用len()获取)
average = total / len(scores)print(f"总分:{total},平均分:{average:.1f}")

输出结果:

总分:433,平均分:86.6

2. 遍历混合类型列表

列表中的元素可以是不同类型(不推荐,但语法允许),for循环仍能正常遍历:

# 混合类型列表
mixed_list = [10, "apple", True, 3.14]for item in mixed_list:# 打印元素及其类型print(f"元素:{item},类型:{type(item)}")

输出结果:

元素:10,类型:<class 'int'>
元素:apple,类型:<class 'str'>
元素:True,类型:<class 'bool'>
元素:3.14,类型:<class 'float'>

3. 遍历列表时获取索引

有时我们不仅需要元素的值,还需要知道元素在列表中的位置(索引)。可以用range()函数结合列表长度实现:

fruits = ["苹果", "香蕉", "橙子"]# 用range(len(fruits))生成索引序列
for i in range(len(fruits)):print(f"索引{i}{fruits[i]}")

输出结果:

索引0:苹果
索引1:香蕉
索引2:橙子

解析len(fruits)获取列表长度(3),range(3)生成0,1,2的索引序列,循环中通过fruits[i]访问对应位置的元素。

四、range()函数:生成数字序列

当我们需要按固定次数循环(如循环10次),或需要一组连续的数字时,range()函数是最方便的工具。它能生成一个不可变的数字序列,专门用于for循环遍历。

1. range()函数的三种语法形式

range()函数有三种常用形式,通过参数控制生成的数字序列:

语法形式说明示例生成的序列
range(stop)从0开始,到stop-1结束(不包含stoprange(5)0,1,2,3,4
range(start, stop)start开始,到stop-1结束range(2,7)2,3,4,5,6
range(start, stop, step)start开始,步长为step(每次递增step),直到小于stopstep为负数时反向生成)range(1,10,2)1,3,5,7,9
  • start:起始值,默认为0(第一种形式)。
  • stop:结束值,必须指定,生成的序列不包含stop
  • step:步长,默认为1(每次递增1);可以为负数(表示递减)。

2. 代码演示:三种形式的range()

# 形式1:range(stop)
print("range(5)生成的序列:")
for num in range(5):print(num, end=' ')  # 输出:0 1 2 3 4 # 形式2:range(start, stop)
print("\n\nrange(2,7)生成的序列:")
for num in range(2,7):print(num, end=' ')  # 输出:2 3 4 5 6 # 形式3:range(start, stop, step)(步长为2)
print("\n\nrange(1,10,2)生成的序列:")
for num in range(1,10,2):print(num, end=' ')  # 输出:1 3 5 7 9 # 形式3:步长为负数(递减序列)
print("\n\nrange(10,0,-2)生成的序列:")
for num in range(10,0,-2):print(num, end=' ')  # 输出:10 8 6 4 2 

3. 常见问题:range()生成的是"序列"而非"列表"

需要注意的是,range()函数生成的是一个range对象(一种特殊的可迭代对象),而非列表。如果需要查看完整序列,可以用list()函数转换:

# range对象转换为列表
num_range = range(1,5)
num_list = list(num_range)
print(num_list)  # 输出:[1, 2, 3, 4]

五、for循环中的缩进与代码块

Python通过缩进来区分代码块,这是for循环中最容易出错的地方。循环体必须缩进,否则会被视为循环外的代码;同一循环体的缩进量必须一致。

1. 正确缩进示例

for i in range(3):print("循环内:", i)  # 缩进4个空格,属于循环体
print("循环外:结束")  # 无缩进,不属于循环体

输出结果:

循环内:0
循环内:1
循环内:2
循环外:结束

2. 错误缩进示例(缩进缺失)

for i in range(3):
print("循环内:", i)  # 错误:缺少缩进

运行后会报错:

IndentationError: expected an indented block

(缩进错误:需要缩进块)

3. 错误缩进示例(缩进不一致)

for i in range(3):print("第一次打印:", i)  # 4个空格缩进print("第二次打印:", i)  # 2个空格缩进(错误)

运行后会报错:

IndentationError: unindent does not match any outer indentation level

(缩进错误:缩进量与外层不一致)

4. 缩进注意事项

  • 推荐使用4个空格作为缩进(Python官方规范)。
  • 不要混合使用空格和Tab键(不同编辑器对Tab的解析可能不同,导致错误)。
  • 循环体可以包含多行代码,所有行必须保持相同的缩进量。

六、综合案例:1到100的求和

利用for循环和range()函数,我们可以轻松实现"计算1到100所有整数的和"这一经典问题。

1. 案例分析

需求:计算1 + 2 + 3 + … + 100的结果。

思路:

  • 初始化一个变量total(总和),初始值为0。
  • for循环遍历1到100的所有整数(用range(1, 101)生成)。
  • 每次循环将当前整数加到total中。
  • 循环结束后,total的值就是1到100的和。

2. 代码实现

# 计算1到100的总和
total = 0  # 初始化总和为0# 遍历1到100的所有整数(range(1,101)生成1-100的序列)
for num in range(1, 101):total += num  # 等价于 total = total + num# 打印结果
print(f"1到100的总和是:{total}")

3. 执行过程解析

  • 循环开始前,total = 0
  • 第一次循环:num = 1total = 0 + 1 = 1
  • 第二次循环:num = 2total = 1 + 2 = 3
  • 第三次循环:num = 3total = 3 + 3 = 6
  • 第100次循环:num = 100total累加后变为5050。
  • 循环结束,打印total的值5050。

输出结果:

1到100的总和是:5050

4. 拓展:计算1到100的偶数和

基于上述案例,稍作修改可以计算1到100中所有偶数的和:

# 计算1到100的偶数和
even_total = 0# 方法1:遍历所有数,筛选偶数
for num in range(1, 101):if num % 2 == 0:  # 如果是偶数(能被2整除)even_total += numprint(f"1到100的偶数和(方法1):{even_total}")# 方法2:直接用range生成偶数序列(更高效)
even_total2 = 0
for num in range(2, 101, 2):  # 从2开始,步长2,生成2,4,...,100even_total2 += numprint(f"1到100的偶数和(方法2):{even_total2}")

输出结果:

1到100的偶数和(方法1):2550
1到100的偶数和(方法2):2550

解析:方法2直接通过range(2, 101, 2)生成所有偶数,避免了条件判断,效率更高,体现了range()函数的灵活性。

七、for循环的常见应用场景

for循环在实际开发中应用广泛,以下是一些典型场景:

  1. 数据遍历与处理:遍历列表、字符串、字典等,对每个元素进行计算、转换或筛选。

    # 筛选列表中的正数
    numbers = [-2, 5, -1, 8, -3]
    positives = []
    for num in numbers:if num > 0:positives.append(num)
    print(positives)  # 输出:[5, 8]
    
  2. 重复执行固定次数:结合range()函数,执行指定次数的操作(如打印5次"Hello")。

    # 打印5次"Hello"
    for _ in range(5):  # 变量用_表示不关心具体值print("Hello")
    
  3. 累加/累乘计算:如求和、求阶乘(1×2×3×…×n)等。

    # 计算5的阶乘(5! = 1×2×3×4×5)
    factorial = 1
    for i in range(1, 6):factorial *= i
    print(f"5的阶乘是:{factorial}")  # 输出:120
    
  4. 字符串处理:统计字符出现次数、拼接字符串、生成新字符串等。

    # 将字符串中所有小写字母转为大写
    text = "Hello World"
    upper_text = ""
    for char in text:upper_text += char.upper()  # 调用upper()方法转大写
    print(upper_text)  # 输出:HELLO WORLD
    

八、总结与练习

for循环是Python中处理重复操作的基础工具,本文核心知识点:

  • 语法结构for 变量 in 可迭代对象: 循环体,通过缩进区分循环体。
  • 可迭代对象:字符串(遍历字符)、列表(遍历元素)等,for循环依次取出每个元素。
  • range()函数:生成数字序列,三种形式(range(stop)range(start, stop)range(start, stop, step))灵活控制序列范围和步长。
  • 核心应用:遍历数据、重复操作、累加计算等,通过"1到100的求和"案例实践了基本用法。

练习题目(从易到难)

  1. 遍历字符串"Python",打印每个字符的大写形式(提示:用char.upper())。
  2. 计算列表[2,4,6,8,10]中所有元素的平方和(每个元素的平方相加)。
  3. range()函数生成10到1的递减序列(10,9,…,1),并打印每个数字。
  4. 计算1到50中所有能被3整除的数的和。

通过这些练习,你将逐步熟悉for循环的用法,为后续学习更复杂的循环逻辑(如循环嵌套、break/continue控制)打下基础。


文章转载自:

http://3UGXIHPX.jpwkn.cn
http://jCjDoPA5.jpwkn.cn
http://EaKjlwi9.jpwkn.cn
http://NP78VXHn.jpwkn.cn
http://dahf4yDw.jpwkn.cn
http://U8YByb9r.jpwkn.cn
http://PlfsDjNZ.jpwkn.cn
http://Y0YDPFfB.jpwkn.cn
http://mlBsgDav.jpwkn.cn
http://M8Bma4oK.jpwkn.cn
http://1zJPxkuV.jpwkn.cn
http://AsLjlrOr.jpwkn.cn
http://IPwHEkql.jpwkn.cn
http://YFMpoR8K.jpwkn.cn
http://OWIBF7IZ.jpwkn.cn
http://8YopAtR1.jpwkn.cn
http://G7iPP1Ib.jpwkn.cn
http://Xs7jC4Nf.jpwkn.cn
http://5xyh1yUG.jpwkn.cn
http://7WOjwEfL.jpwkn.cn
http://pVJIPGSi.jpwkn.cn
http://VgfERhf1.jpwkn.cn
http://NQhuDw81.jpwkn.cn
http://nQmlK5KI.jpwkn.cn
http://2tl6cp0j.jpwkn.cn
http://oCKXsXaR.jpwkn.cn
http://wJCCFCR8.jpwkn.cn
http://MQ8QTgTe.jpwkn.cn
http://FazLhDfl.jpwkn.cn
http://mnioXRRP.jpwkn.cn
http://www.dtcms.com/a/379453.html

相关文章:

  • MySQL 非空约束(NOT NULL):看似简单,却决定数据质量的关键细节
  • 【笔记】悬架减振器的阻尼带宽
  • C++:迭代器失效问题(vector为例)
  • TDengine 选择函数 TAIL() 用户手册
  • 在Linux系统中清理大文件的方法
  • oracle里的int类型
  • 【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读
  • 第五章 Logstash深入指南
  • 猫狗识别算法在智能喂食器上的应用
  • 数据库事务详解
  • Linux学习:基于环形队列的生产者消费者模型
  • size()和length()的区别
  • Windows系统下安装Dify
  • 企业云环境未授权访问漏洞 - 安全加固笔记
  • sv时钟块中default input output以及@(cb)用法总结
  • 广谱破局!芦康沙妥珠单抗覆罕见突变,一解“少数派”的用药困境
  • Guli Mall 25/08/12(高级上部分)
  • 彩笔运维勇闯机器学习--随机森林
  • Python 面向对象实战:私有属性与公有属性的最佳实践——用线段类举例
  • 使用deboor法计算三次B样条曲线在参数为u处的位置的方法介绍
  • 认识HertzBeat的第一天
  • AUTOSAR进阶图解==>AUTOSAR_EXP_ApplicationLevelErrorHandling
  • 线程同步:条件变量实战指南
  • OpenLayers数据源集成 -- 章节七:高德地图集成详解
  • AI助推下半年旺季,阿里国际站9月采购节超预期爆发
  • 电商平台拍立淘API接口调用全解析(基于淘宝/唯品会技术实践)
  • 9.11 Qt
  • 字节一面 面经(补充版)
  • 第二章 ELK安装部署与环境配置
  • I2C 总线