目录
for...range(start,stop[, step])
更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
原文:(开发技巧)Python3基础之掌握循环结构(for、while)与逻辑控制的必备技能
接下来的一段时间我将总结下关于【Python进阶系列】的一系列开发技术知识点的分享文章,主要为初学者从零基础到进阶再到高级和项目实战,结合目前最新的Python版本3.12来做代码示例的样式,并同时也会标注出与Python2的一些异同点。
然后关于Python的Web开发、爬虫开发、操作系统开发、网络安全开发应用领域这块,可以分别参考我的公众号CTO Plus【Flask进阶系列】、【Django进阶系列】、【DRF进阶系列】、【互联网分布式爬虫系列】和【网络安全系列】的内容,敬请关注,欢迎交流。
以下是【Python3进阶系列】的部分内容
本篇是所有编程语言里都具备的一项特性,循环结构。这里我将为Python初学者详细介绍下关于Python3循环结构的使用方法和一些使用技巧。在Python3中,循环结构是编写程序时必不可少的一部分,循环结构可以让我们重复执行相同的代码块,从而实现一些复杂的逻辑。Python3中的循环结构主要有两种形式:while循环和for循环。
循环,也是现实生活中常见的现象,我们常说日复一日,重复做一件事情,就是典型的循环。编程语言就是要解决现实问题的,因此也少不了要循环。
本篇文章我将为大家分享下Python3的while循环和for循环的基本使用方法以及Python3中用于控制循环执行流程的重要工具break、continue和return语句。在使用这些语句时,我们需要注意一些技巧和避免一些坑,以保证程序的正确性和可读性。Python3中的for循环是一种强大的迭代结构,用于遍历序列、集合和其他可迭代对象。
主要内容包括如下:
-
while循环、while...else
-
while-else注意事项和高级使用技巧
-
for...in
-
for...range()
-
循环结构嵌套
-
for...else注意事项和高级使用技巧
-
结合几个代码示例演示for和while循环的应用场景
-
循环结构的流程控制continue、break、pass、return语句
本文将结合一些代码示例介绍一些高级使用技巧,帮助开发者更好地利用while和for循环来处理各种数据和逻辑。希望本篇文章能为大家掌握一些循环方面的高级使用技巧提供帮助,以及帮助各位开发者更好地利用while和for循环来解决实际问题。
while循环
在Python3中,while循环是一种用于重复执行代码块的循环结构,while循环根据条件的真假来重复执行一段代码块。它的基本语法如下所示:
while 条件:
#循环体 代码块
在这个结构中,条件(condition)是一个布尔表达式,如果它的值为True,循环才会执行,并且可能会一直执行循环体中的操作,直到条件变为False为止。然后,程序会继续执行循环之后的代码
while,我们一般翻译成中文是“当...的时候”,在python中,它差不多也是这个含义,即当满足一定条件时,就不断的执行循环体中的语句。
下面是一个简单的while循环的例子,它会输出1到10的数字:
i = 0
while i <= 10:
print(i)
i += 1
在这个例子中,我们使用了一个变量i来控制循环。循环的条件是i小于等于10,每次循环执行完毕后,i的值会加1,直到i大于10时,循环停止。
从这个例子中我们显然可以看到while循环会在每次循环迭代时,首先检查条件是否为真(即i 是否小于等于10)。如果条件为真,则执行代码块,并再次检查条件,重复执行直到条件为假为止。
例如下面两个while循环的条件表达式永远为真,那么这两个将为死循环
while 1:
print("死循环")
while True:
print("死循环")
while...else
while语句也可以配置else使用,当然也可以配置try ... except...使用。
while condition:
# do something
else:
# do something else
扩展代码:
try:
pass
except Exception as e:
print(e)
else:
print("this is else...") # 输出 this is else...
这两个的配合有点类似if ... else,下面通过一个例子来帮助理解,当然,一遇到else了,就意味着已经不在while循环内了。
count = 0
while count < 5:
print(f"{count} is less than 5")
count = count + 1
else:
print(f"{count} is not less than 5")
执行结果:
这段代码意思是当所有元素都被遍历完毕时(即循环执行完毕后),会执行else块中的代码。接下来,让我们来看一些使用while循环和while-else语句的技巧:
1. 控制循环的结束条件:在使用while循环时,需要注意循环的结束条件,否则可能会导致死循环。
2. 使用break和continue语句:和for循环一样,while循环也支持使用break和continue语句来控制循环的执行流程。将在后面的章节介绍这块的内容。
3. 避免在循环中修改循环条件:在循环中修改循环条件可能会导致死循环或者意外的结果,因此应该避免在循环中修改循环条件。
while循环和while-else语句需要注意的坑
接下来,让我们来看一些使用while循环和while-else语句时需要注意的坑:
1. 注意循环变量的初始值:在使用while循环时,需要注意循环变量的初始值,否则可能会导致循环没有执行或者死循环。
2. 注意else块的执行时机:在使用while-else语句时,需要注意else块中的代码什么时候会执行,它会在while循环正常结束时执行,如果在循环中使用了break语句跳出循环,则else块不会执行。
3. 避免在循环中使用全局变量:在循环中使用全局变量可能会导致意外的结果,因此应该尽量避免在循环中使用全局变量。
while循环高级使用技巧
Python3.12中的while循环是一种强大的迭代结构,可以用于处理各种复杂的逻辑和算法。
1. 使用while循环处理动态条件
while循环最常见的用法是在条件满足时重复执行一段代码块。然而,有时条件是动态变化的,这时可以利用while循环处理动态条件。例如,实现一个不断接收用户输入直到输入特定值的程序:
user_input = ""
while user_input != "quit":
user_input = input("Enter a value (or 'quit' to exit): ")
#处理用户输入的值
2. 防止无限循环
在使用while循环时,需要特别注意避免无限循环的情况。为了防止无限循环,可以在循环体内部添加条件判断和合适的终止条件。比如,设置一个最大循环次数限制:
count = 0
while count < 10:
#执行循环体代码
count += 1
3. 利用while循环实现复杂算法
while循环不仅可以用于简单的条件判断,还可以用于实现复杂的算法和逻辑。比如,实现二分查找算法:
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
4. 使用while循环处理状态机
状态机是一种常见的编程模式,可以用于描述对象的状态转换。while循环非常适合用于处理状态机,可以根据不同的状态执行相应的逻辑。例如,实现一个简单的有限状态机:
state = "start"
while state != "end":
if state == "start":
# 执行start状态的逻辑
state = "middle"
elif state == "middle":
# 执行middle状态的逻辑
state = "end"
通过上述高级使用技巧,开发者可以更好地利用Python3.12中的while循环来处理动态条件、防止无限循环、实现复杂算法和处理状态机等各种实际问题。while循环作为一种灵活而强大的迭代结构,为解决复杂的编程任务提供了重要的工具和支持。
更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
接下来介绍下for循环
for循环
for循环是Python3中另一种常用的循环结构,用于遍历一个序列或者其他可迭代对象中的元素。它的语法如下:
for 变量 in 可迭代对象:
#循环体 操作语句
#可以对变量进行操作
从这个基本结构看,有着同if条件语句类似的地方:都有冒号,语句块都要缩进。在这个结构中,变量是用来存储可迭代对象中的每个元素的,它会依次取可迭代对象(sequence)中的每个元素赋值给自己。而可迭代对象(sequence)可以是列表、元组、字符串、字典等等可迭代对象。
关于能够用来for的对象列表、元组、字符串、字典这些,请分别参考后面的文章:
《Python3基础之经典数据类型字符串(str)开发使用注意事项和使用技巧代码示例详解》
《Python3基础之经典数据类型序列(sequence)的开发使用注意事项和代码示例详解》
《探索Python3中循环对象的迭代与循环:释放数据的魔法》
《Python3基础之经典数据类型列表(list)的开发使用注意事项和代码示例详解》
《Python3基础之经典数据类型元组(tuple)开发使用注意事项和代码示例详解》
《Python3基础之经典数据类型字典(dict)开发使用注意事项和代码示例详解》
《Python3基础之经典数据类型集合(set)开发使用注意事项和代码示例详解》
遍历字符串
下面的代码示例分别遍历英文和中文的字符串
遍历数组
这个循环就是每次从列表[28, "SteveRocket", {11,22}]中取出一个元素,然后将这个元素赋值给i,之后执行隶属于for的操作(print)。
for...range(start,stop[, step])
在循环中,我们经常会用到range类型,它是一个用来生成一系列连续整数的函数(内建函数)。range函数的基本结构如下:
range(start, stop, step)
其中start是起始值,默认为0;stop是结束值,不包括在内;step是步长,默认为1。例如,range(1, 5)将生成1, 2, 3, 4这四个整数。下面是一个简单的for循环的例子,它会输出1到10的数字:
当然,range的用法也非常灵活:
-
range(101):可以用来产生0到100范围的整数,需要注意的是取不到101。
-
range(1, 101):可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。
-
range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。
-
range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
for i in range(1, 11):
print(i)
在这个例子中,我们使用了range函数来生成1到10的数字序列,然后使用for循环遍历这个序列,每次循环输出一个数字。
求和
如果明确的知道循环执行的次数或者要对一个容器进行迭代,那么我们推荐使用for-in循环,例如下面代码中计算1~100求和的结果:
sum = 0
for x in range(101):
sum += x
print(sum)# 5050
需要说明的是上面代码中的range(1, 101)可以用来构造一个从1到100的范围,当我们把这样一个范围放到for-in循环中,就可以通过前面的循环变量x依次取出从1到100的整数。
用for循环实现1~100之间的偶数求和
sum = 0
for x in range(2, 101, 2):
sum += x
print(sum)
循环和分支结构:用for循环实现1~100之间的偶数求和
当然,也可以通过在循环中使用分支结构的方式来实现相同的功能,代码如下所示。
sum = 0
for x in range(1, 101):
if x % 2 == 0:
sum += x
print(sum)
说明:相较于上面直接跳过奇数的做法,下面这种做法很明显并不是很好的选择。这里只为了演示下for结合range和if的使用方法。
循环和分支结构:筛选奇偶数
在循环中,我们还可以使用分支结构,例如if语句,来根据条件执行不同的操作。例如:
for i in range(1, 10):
if i % 2 == 0:
print(i, "是偶数")
else:
print(i, "是奇数")
在这个例子中,我们遍历了1到9之间的整数,如果是偶数就打印出"是偶数",否则就打印出"是奇数"。
for循环结合数组下标索引遍历
elements = ["I", "am", "steverocket"]
for index, element in enumerate(elements):
print(index, element)
for i in range(len(elements)):
print(i, elements[i])
关于range更多的使用介绍参考《Python基础之最新的73个内置函数(6)》。
for循环结构嵌套
如果要构造不知道具体循环次数的循环结构,我们推荐使用while循环。while循环通过一个能够产生或转换出bool值的表达式来控制循环,表达式的值为True则继续循环;表达式的值为False则结束循环。
和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。下面的例子演示了如何通过嵌套的循环来输出一个九九乘法表。
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i}*{j}={i * j}', end='\t')
print()
输出结果
关于f'{i}*{j}={i * j}'这块的使用方法可以参考后面的文章《Python3基础之经典数据类型字符串(str)开发使用注意事项和使用技巧代码示例详解》
除了基本的循环结构外,我们还可以在循环中嵌套另一个循环,这样就可以对二维数组或者其他嵌套结构进行遍历。
for...else
除了有while...else、try...else外,还可以有for...else。这个循环也通常用在当跳出循环之后要做的事情。
代码示例1:
for i in range(3):
print(i, end=" ")
else:
print("for循环语句执行完毕...")
输出结果
0 1 2 for循环语句执行完毕...
代码示例2:
from math import sqrt
for n in range(99, 1, -1):
root = sqrt(n)
if root == int(root):
print(n)
break
else:
print("Run Over Nothing....")
如果把代码示例2中的for n in range(99, 1, -1)修改为for n in range(99, 81, -1)看看是什么结果?从上面的代码示例中可以看出来,当所有元素都被遍历完毕时(即循环执行完毕后),会执行else块中的代码。
更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
for循环和for-else语句的技巧和需要注意的坑
接下来,让我们来看一些使用for循环和for-else语句的技巧:
1. 遍历列表、元组、字典、集合等:for循环可以遍历各种类型的可迭代对象,比如列表、元组、字典的键、字典的值、集合等。
2. 使用enumerate函数获取索引:在遍历列表时,可以使用enumerate函数获取元素的索引,例如 for index, item in enumerate(iterable):。
3. 使用zip函数同时遍历多个可迭代对象:在遍历多个列表时,可以使用zip函数将多个可迭代对象打包成一个元组,然后进行遍历。
4. 结合条件判断:在for循环中,可以结合条件判断语句if来过滤元素,只处理符合条件的元素。
接下来,让我们来看一些使用for循环和for-else语句时需要注意的坑:
1. 注意循环变量的作用域:在for循环中定义的循环变量在循环结束后仍然可以访问,这可能会导致一些意外的结果,因此需要注意循环变量的作用域。
2. 注意else块的执行时机:在使用for-else语句时,需要注意else块中的代码什么时候会执行,它会在for循环正常结束时执行,如果在循环中使用了break语句跳出循环,则else块不会执行。
3. 避免在循环中修改可迭代对象:在循环中遍历可迭代对象时,应避免修改可迭代对象本身,这可能会导致意外的结果。
循环结构的应用场景和代码示例
经过上面的描述,我们已经知道Python3中有两种循环结构,分别是while循环和for循环。它们各自有不同的应用场景,下面我结合代码示例来为各位粉丝详细介绍一下。
while循环结构的应用场景
while循环结构适用于需要重复执行某个操作,但不知道具体执行次数的场景。while循环结构的应用场景包括如下(当然这里只是举了其中几个例子):
1. 处理用户输入:当我们需要不断地从用户那里获取输入,直到用户输入满足某个条件时,就可以使用while循环。例如:
while True:
age = input("请输入您的年龄:")
if age.isdigit() and int(age) >= 18:
print("您已经成年了!")
break
else:
print("您还未成年,请重新输入!")
在这个例子中,我们不断地从用户那里获取输入,直到用户输入的年龄大于等于18岁为止。
2. 处理文件内容:当我们需要对文件中的内容进行处理,直到文件读取完毕时,就可以使用while循环。例如:
with open("file.txt", "r") as f:
while True:
line = f.readline()
if not line:
break
print(line)
在这个例子中,我们不断地从文件中读取一行内容,直到文件读取完毕。
3. 处理网络请求:当我们需要不断地处理网络请求,直到请求完成时,就可以使用while循环。例如:
import requests
while True:
response = requests.get("https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q")
if response.status_code == 200:
print(response.text)
print("请求成功")
break
else:
print("请求失败,重试")
在这个例子中,我们不断地发送网络请求,直到请求成功为止。
for循环结构的应用场景
for循环结构适用于需要遍历一个序列或者其他可迭代对象中的元素的场景。for循环结构的应用场景包括下(这里只是举几个大概的例子):
1. 遍历列表:当我们需要遍历一个列表中的所有元素时,就可以使用for循环。例如:
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
在这个例子中,我们遍历了一个水果列表,并打印出了每个水果的名称。
2. 遍历字典:for循环可以直接遍历字典的键值对,非常方便。当我们需要遍历一个字典中的所有键值对时,就可以使用for循环。例如:
scores = {"Tom": 80, "Jerry": 90, "Lucy": 85}
for name, score in scores.items():
print(name, "的成绩是:", score)
在这个例子中,我们遍历了一个学生成绩字典,并打印出了每个学生的姓名和成绩。
3. 遍历range类型:当我们需要遍历一系列连续整数时,就可以使用for循环和range函数。例如:
for i in range(1, 11):
print(i)
在这个例子中,我们遍历了1到10之间的所有整数,并打印出了它们的值。
4. 使用for循环遍历多个序列:for循环可以同时遍历多个序列,这在处理多个相关的序列时非常方便。例如,同时遍历两个列表:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
for x, y in zip(list1, list2):
print(x, y)
5. 使用for循环处理迭代器和生成器:迭代器和生成器是Python中非常重要的概念,它们可以用于按需生成数据,for循环可以直接处理迭代器和生成器。例如,使用生成器生成斐波那契数列:
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
for num in fibonacci():
if num > 1000:
break
print(num)
通过上述高级使用技巧,开发者可以更好地利用for循环来处理多个序列、字典、枚举对象、迭代器和生成器等各种实际问题。for循环作为一种灵活而强大的迭代结构,为处理各种数据和逻辑提供了重要的工具和支持。
更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
循环控制语句-中断循环(break和continue)
在前面一篇文章中我介绍到了if的条件判断语句,那么,这里我就介绍下循环中的控制语句。逻辑控制(或控制流程)是根据逻辑关系来决定代码的执行顺序和循环次数。Python3 中,循环结构的控制流程主要有四种形式:break 语句和 continue 语句、pass语句和return语句。
1. break语句
break语句用于终止循环,跳出当前循环,不再执行循环中剩余的代码。当程序执行到break语句时,循环会立即停止,程序会继续执行循环之后的代码。它通常用于在满足某个条件时提前结束循环,可以使用break语句来实现。
i = 1
while i <= 10:
if i == 5:
break
print(i)
i += 1
在这个例子中,当i等于5时,程序执行到break语句,循环立即停止,程序会继续执行循环之后的代码。
使用break语句时需要注意以下几点:
-
确保break语句被正确触发:在使用break语句时,需要确保它被正确触发,否则可能会导致循环无法正常结束。
-
避免在嵌套循环中使用break:在嵌套循环中使用break语句可能会导致意外的结果,因此需要慎重考虑是否使用break。
2. continue语句
continue语句用于跳过当前迭代,继续(直接)进入下一次迭代。当程序执行到continue语句时,循环会停止执行当前循环体的剩余代码,然后开始下一次循环。它通常用于在某些特定条件下跳过部分循环逻辑。
for i in range(1, 11):
if i % 2 == 0:
continue
print(i)
在这个例子中,当i为偶数时,程序执行到continue语句,当前循环会停止执行剩余的代码,然后开始下一次循环。
使用continue语句时需要注意以下几点:
-
确保continue语句被正确触发:在使用continue语句时,需要确保它被正确触发,否则可能会导致循环无法正常执行。
-
避免在嵌套循环中使用continue:在嵌套循环中使用continue语句可能会导致意外的结果,因此需要慎重考虑是否使用continue。
3. pass语句
pass语句用于占位,它不做任何事情,只是占用一行代码。在某些情况下,我们需要在代码中占用一行语句,但是又不需要执行任何代码,这时就可以使用pass语句。
for i in range(1, 11):
if i % 2 == 0:
pass
else:
print(i)
在这个例子中,当i为偶数时,程序执行到pass语句,不做任何事情,然后继续执行下一行代码。
4. return语句
return语句用于从函数中返回值,并结束函数的执行。它通常用于在函数执行到一定条件时提前结束函数。
while 1:
if i==10:
pass
# return # SyntaxError: 'return' outside function
i+=1
使用return语句时需要注意以下几点:
-
确保return语句被正确触发:在使用return语句时,需要确保它被正确触发,否则可能会导致函数无法正常返回值。
-
避免在循环中过早使用return:在循环中过早使用return语句可能会导致函数提前结束,因此需要慎重考虑return语句的位置。
-
不能单独在for循环和一个while循环中使用return语句,否则报语法错误。
关于return的其他详细介绍和使用,参考后面关于函数的文章:
《Python3进阶之函数的奥秘:探索函数的定义、调用和返回值》
《Python3进阶之解密函数参数传递的奥秘与技巧》
《Python实战:函数式编程案例之Python将函数作为参数以及作为返回值》
《Python3进阶之函数对象及从参数传递到函数式编程(函数的高级使用技巧)》
《Python3进阶之函数的多种使用方式以及函数嵌套函数的使用方法》
总结
在本文中,我们介绍了Python3中的循环结构,包括while循环和for循环,以及range类型、循环中的分支结构、嵌套的循环以及提前结束程序等知识。我们还学习了循环控制语句,包括break、continue和pass,它们可以帮助我们控制循环的执行流程。
while、for、for-else语句和while-else语句是Python3中非常常用的循环结构,它可以方便地重复执行代码块,以及可以方便地遍历各种类型的可迭代对象。在使用这些循环语句时,我们需要注意一些技巧和避免一些坑,以保证程序的正确性和可读性。
循环结构是编写程序时必不可少的一部分,它可以让我们重复执行相同的代码块,从而实现一些复杂的逻辑。希望本文对我们有所帮助!
Python专栏
https://blog.youkuaiyun.com/zhouruifu2015/category_5742543
欢迎关注公众号CTO Plus,有问题欢迎后台留言交流。
更多精彩,关注我公号,一起学习、成长
CTO Plus
一个有深度和广度的技术圈,技术总结、分享与交流,我们一起学习。 涉及网络安全、C/C++、Python、Go、大前端、云原生、SRE、SDL、DevSecOps、数据库、中间件、FPGA、架构设计等大厂技术。 每天早上8点10分准时发文。
标准库系列-推荐阅读:
推荐阅读:
最后,不少粉丝后台留言问加技术交流群,之前也一直没弄,所以为满足粉丝需求,现建立了一个关于Python相关的技术交流群,加群验证方式必须为本公众号的粉丝,群号如下: