还在问python的循环语句怎么写?别急,这事儿嘛,刚上手Python的同学,十有八九都会在这里打个转转。说实话,这玩意儿真没那么玄乎,就是那点儿事儿,for和while,两大主力,搞明白了,基本上Python里的循环就通透了。就像你每天吃饭睡觉上班(或者上学)一样,总有些事儿得重复干,对吧?编程也一样,总有些任务需要一遍又一遍地执行,这时候,循环就登场了,它是咱们偷懒(划掉,是提高效率)的神器。
要问python的循环语句怎么写,其实核心就那两种:for
循环和 while
循环。听起来是不是有点儿像小时候玩的积木?对,就是这两个基本块儿,能搭出各种各样的重复操作。
先说说 for
循环吧。这家伙,通常是用来遍历某个序列的,比如列表(List)、元组(Tuple)、字符串(String),或者其他任何“可迭代对象”。啥叫“可迭代”?简单理解,就是那些里面的元素可以一个接一个地拿出来看的东西。
它的基本架势是这样的:
python
for 变量 in 可迭代对象:
# 这里是循环体,会被重复执行
# 在每一次循环里,'变量'都会被赋值为可迭代对象中的下一个元素
你比如说,我有一堆水果要数数或者看看都是啥:
python
fruits = ['苹果', '香蕉', '橙子', '葡萄']
for fruit in fruits:
print(f"我有一个 {fruit}")
跑一下这段代码,你会看到它依次打印出“我有一个 苹果”,“我有一个 香蕉”,等等。这里的 fruit
就是那个“变量”,它在每次循环中,先被赋值为 ‘苹果’,然后是 ‘香蕉’,以此类推,直到列表里的所有元素都被“看”了一遍。
字符串也是可迭代的!你想啊,字符串不就是一串字符嘛:
python
my_string = "Python"
for char in my_string:
print(f"看,这个字母是:{char}")
它会把 ‘P’,’y’,’t’,’h’,’o’,’n’ 一个一个地给你拎出来。
别忘了 Python 里超级好用的一个函数叫 range()
。如果你不是想遍历现有的序列,而是想按照某个数字范围来循环,range()
就是你的好朋友。它能生成一个数字序列,虽然它本身不是一个列表(省内存),但它是可迭代的,完全可以用在 for
循环里。
range()
有几种用法:
range(stop)
:从 0 开始,到stop-1
结束。比如range(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
开始,到stop-1
结束,每次跳跃step
步长。比如range(1, 10, 2)
会生成 1, 3, 5, 7, 9。步长可以是负数,实现倒序。比如range(10, 0, -1)
会生成 10, 9, 8, …, 1。
所以,如果你想循环固定次数,或者遍历一个数字范围,for i in range(...)
这个模式是见到最多的了。比如,计算从1加到100的所有整数和:
python
total = 0
for i in range(1, 101): # 从1到100,记住range是“左闭右开”
total += i
print(f"1加到100的和是:{total}")
是不是感觉 for
循环很直观?特别适合那种“我有多少东西,我想对每个东西都干点啥”的场景。
好,接下来聊聊 while
循环。这位老兄跟 for
的脾气不太一样。while
循环不是盯着一个序列不放,它更像是盯着一个“条件”。只要这个条件是真的(True),它就一直执行循环体里的代码,直到条件变成假的(False)为止。
它的基本写法是:
python
while 条件:
# 循环体
# 记得在循环体里改变条件相关的变量,否则可能变“无限循环”!
重点来了,那个“条件”必须是个布尔表达式,就是结果要么是 True,要么是 False。而且,你得确保在循环体内部,这个条件最终能变成 False,否则…恭喜你,得到一个停不下来的“无限循环”!除非你强制终止程序(比如按 Ctrl+C)。
举个例子,我想数数,从1数到5:
python
count = 1
while count <= 5: # 条件:count小于等于5
print(count)
count += 1 # 关键一步:改变count的值,让条件有机会变成False
如果忘了 count += 1
这步,那 count
永远是1,1 <= 5
永远是 True,程序就卡那儿了,无限打印1。这可是初学者常踩的坑,一定要注意!
while
循环特别适合那种“我不知道要重复多少次,但我知道什么时候应该停下”的场景。比如,写一个简单的猜数字游戏,让用户一直猜,直到猜对为止:
“`python
import random
secret_number = random.randint(1, 10)
guess = 0 # 初始值,让循环先跑起来
while guess != secret_number: # 条件:猜的数字不等于秘密数字
guess_str = input(“请猜一个1到10之间的数字:”)
guess = int(guess_str) # 假设用户输入的是有效的数字
if guess < secret_number:
print("太小了!")
elif guess > secret_number:
print("太大了!")
print(f”恭喜你,猜对了!秘密数字是 {secret_number}”)
“`
你看,这里我们不知道用户要猜多少次,可能是1次,也可能是10次,但我们知道什么时候循环结束——当用户猜的数字等于秘密数字时。用 while
来写就特别合适。
除了 for
和 while
,还有几个“帮手”可以在循环里头调控节奏,它们是 break
和 continue
。
break
就像是循环里的“紧急刹车”。一旦执行到 break
,不管循环条件是否还满足(或者 for
循环是否还有没遍历完的元素),整个循环会立即、立刻、马上停止,程序会跳出当前循环,继续执行循环后面的代码。
啥时候用?比如在一个很长的列表里找某个特定的东西,找到了第一个就够了,后面的不用再找了,直接 break
。
“`python
items = [‘书包’, ‘铅笔盒’, ‘橡皮擦’, ‘书本’, ‘尺子’, ‘书包’]
search_item = ‘书本’
for item in items:
print(f”正在检查:{item}”)
if item == search_item:
print(f”找到了!是 {search_item}”)
break # 找到书本了,赶紧溜!后面的书包不用再看了
“`
执行到找到“书本”的时候,后面的“尺子”和第二个“书包”就不会再被打印出来了,因为 break
已经让循环提前结束了。
再来说说 continue
。它更像是一个“跳过当前回合”的指令。执行到 continue
时,当前这次循环剩余的代码会被跳过,程序直接进入下一次循环的开始。
这个啥时候用?比如处理一堆数据,有些数据是“脏的”或者不符合要求的,你不想处理它们,但又不想停下整个循环,就想跳过这一个,继续处理下一个。
“`python
numbers = [1, 3, -2, 5, 0, -1, 4]
positive_sum = 0
for num in numbers:
if num <= 0:
print(f”发现非正数 {num},跳过它。”)
continue # 如果是小于等于0的数,跳过当前这次循环,直接看下一个数
positive_sum += num # 只有当num大于0时,才会执行这行代码
print(f”所有正数的和是:{positive_sum}”)
“`
你会看到 -2
和 0
被“跳过”了,没有加到 positive_sum
里。
还有个不常用但在特定场景下有点儿意思的 else
子句,它能跟 for
和 while
循环搭配。循环后面跟 else
?听着是不是有点儿怪?
for
循环的 else
:当 for
循环正常执行完毕(也就是把所有可迭代对象里的元素都遍历完了,没有被 break
中途打断),else
块里的代码就会被执行。
while
循环的 else
:当 while
循环的条件变成 False,正常结束时,else
块里的代码就会被执行。
如果循环被 break
中途打断了,那么 else
块里的代码就不会执行。
这特性挺适合用来实现“查找某个东西,如果整个循环找完了都没找到,就执行某个操作”。
“`python
data = [‘apple’, ‘banana’, ‘cherry’]
target = ‘grape’
for item in data:
if item == target:
print(f”找到了 {target}!”)
break # 找到了就break
else: # 如果循环没被break打断,也就是没找到
print(f”在列表中没找到 {target}”)
“`
运行上面这段,因为 ‘grape’ 不在列表里,循环会正常遍历完 [‘apple’, ‘banana’, ‘cherry’],然后因为没遇到 break
,最后会执行 else
块里的 print
语句。如果你把 target
改成 ‘banana’,那么找到后 break
就会执行,else
块就不会被执行了。这个用法挺精妙的,但不是特别常用,了解一下就好。
最后,别忘了 嵌套循环。啥叫嵌套循环?就是循环里头再套个循环,就像俄罗斯套娃。最经典的例子就是打印九九乘法表了:
“`python
外层循环控制行
for i in range(1, 10):
# 内层循环控制列
for j in range(1, i + 1): # 注意这里的范围是到i+1,因为要打到“乘数等于被乘数”那一下
# print默认会换行,用end=’ ‘让它们在同一行,用\t让它们对齐
print(f”{j}x{i}={i*j}\t”, end=”)
# 一行打完了,换行
print()
“`
外层 i
循环从1到9,内层 j
循环从1到 i
。这样就能打出漂亮整齐的九九乘法表了。嵌套循环非常强大,处理二维数据(比如矩阵)、或者需要对每种组合都做一遍操作的时候特别管用。不过嵌套的层数太多(比如超过三层),代码可读性就会下降,而且性能也可能受影响,写的时候得权衡一下。
你看,python的循环语句怎么写,归根结底就是玩转 for
和 while
,再根据需要搭配 break
、continue
,偶尔用用 else
,搞搞嵌套。它们就像是编程里的“重复执行模块”,帮你把那些重复、枯燥的活儿交给电脑去干。
刚开始写循环,可能会遇到一些小问题,比如无限循环、循环次数不对、或者遍历字典不知道怎么拿key和value(提示:字典有 .keys()
、.values()
和 .items()
方法,for key, value in my_dict.items():
了解一下?)。这些都是正常的,谁不是从磕磕绊绊过来的?多写多练,多看看别人怎么写的,遇到问题了别怕google、别怕查文档。慢慢地,你就会发现,循环这东西,其实挺顺手的,它是你解决很多编程问题的好帮手。别让它成了拦路虎,而是要把它变成你的得力工具。加油!
评论(0)