python20-while和for in的美
课程:B站大学
记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化
分支语句那些事儿
- 循环的类型
- 循环的作用
- 循环的构成要素
- while 循环
- while 循环实战
- 循环语句 for-in
- 实践是检验真理的唯一标准
循环的类型
- 重复一定次数的循环,称为计次循环。 比如跑步五公里,每公里就是一个计次单位。
- 直到条件不满足时才停止重复执行的循环,称为条件循环。 比如直到跑不动为止,这没有具体的跑量,结束跑步的条件是跑不动了。
Python 提供了两种类型的循环可以应对不同的使用场景。
for-in 循环: 计次循环
while 循环: 条件循环
循环的作用
- 提高代码复用性,减少代码冗余
- 遍历序列(字符串,元组,列表,字典等)
循环的构成要素
- 初始化语句: 一条或多条语句,用于完成一些初始化工作。初始在循环开始之前执行。
- 循环条件: 一般是一个布尔表达式,这个表达式能决定是否执行循环体
- 循环体: 这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行。
- 迭代语句: 这个部分在每次执行循环体结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量向趋近于结束条件改变。
while 循环
在日常的生活中有时候循环的次数通常不会在刚开始就知道,而是满足条件之后就停止循环。
如有一路公交车不是固定时间间隔发车,而是在人数满足多少个之后就发车,一直到晚上的11点准时收工,那么没有到11点的话就会一直重复,直到条件不满足时才结束的循环,称为条件循环。
只要条件为真,这种循环会一直持续下去,通常指的是 while 循环。
while 循环的语法
while 条件表达式: 循环体
当条件表达式的返回值为真时,则执行循环体中的语句,执行完毕后,重新判断条件表达 式的返回值,直到表达式返回的结果为假时,退出循环。
while 循环实战
实战1: 求 1~10 之间所有整数的乘积。
# 保存结果的变量
result = 1
# 循环控制变量
n = 2
# 开始循环
while n <= 10:# 计算乘积result *= n# 改变循环变量向结束条件趋近n += 1# 输出结果
print("1~10的乘积为:", result)
实战2: 输入密码,直到密码输入正确,输出 登录成功。
password = "password" # 设置正确的密码
input_password = ""while input_password != password:input_password = input("请输入密码: ")print("密码正确,登录成功!")
实战3:在行酒令中,有一个数 7 小游戏,游戏参与者依次报数,但需要跳过所有包含 7 或 7 的整数倍的数字,编写程序找出 1~100 范围内所有符合该条件的数字,方便在游戏中跳过。
# 循环变量实始化
n = 1
# 循环条件
while n<=100:# 数字对7求模为0,则表示该数字是7的倍数# 将数字转换为字符串类型,使用成员运算符判断字符7是否在字符串中,检查包含关系if n % 7 == 0 or "7" in str(n):# 输出满足条件的数字print(n)# 改变循环变量趋近于结束条件n += 1
小tips:表中保存若干个数字,计算数字的和,最小值,最大值,平均数
def func1():n_sum = 0n_max = Nonen_min = Nonedata = [23456, 234, 23, 423, 423, 423, 423, 412, 3235, 346, 47, 5687, 678, 7, 453623, 4523, 565, 786, 9789, 567,34634, 234]# for n in data:i = 0l = len(data)#打断点查看执行逻辑while i < l:n = data[i]n_sum += nif n_max == None or n_max < n:n_max = nif n_min == None or n_min > n:n_min = ni += 1avg = n_sum / lprint(n_sum)print(n_max)print(n_min)print(avg)
思路:
首先,代码定义了一个名为func1()的函数,用于计算数字的和、最小值、最大值和平均数。
在函数内部,定义了变量n_sum,初始值为0,用于保存数字的和;定义了变量n_max和n_min,初始值均为None,分别用于保存最大值和最小值。
创建了一个列表data,其中保存了待处理的数字数据。
使用while循环遍历列表data中的每个元素。循环使用了索引i来访问列表中的每个数字。
在循环内部,首先获取当前数字n,然后执行以下操作: 将当前数字n累加到变量n_sum中,即n_sum += n。 判断当前数字n是否为最大值: 如果n_max为None,表示当前数字是第一个数字,将n_max更新为当前数字n。 否则,判断当前数字n是否大于n_max,如果是,则将n_max更新为当前数字n。 判断当前数字n是否为最小值: 如果n_min为None,表示当前数字是第一个数字,将n_min更新为当前数字n。 否则,判断当前数字n是否小于n_min,如果是,则将n_min更新为当前数字n。 更新索引i,即i += 1。
循环结束后,得到了数字的和、最大值和最小值。
接下来,计算平均数avg,即将数字的和n_sum除以列表data的长度。
通过print()函数分别打印输出数字的和、最大值、最小值和平均数。
小tips:编写一个 Python 程序,输入一个整数,计算该整数的二进制表示形式
def func5():result = ""data = int(input("Num:"))# 除二取余法while data != 0:tmp = data % 2data = data // 2result = str(tmp) + resultprint(result)
代码思路:
首先,我们初始化一个空字符串 result,用于存储最终的二进制表示形式。
然后,使用 input 函数获取用户输入的整数,并通过 int 函数将其转换为整数类型,赋值给变量 data。
接下来,使用 while 循环进行二进制转换。在每次循环中,我们通过 data % 2 取余操作得到当前位置的二进制值,并将其存储在临时变量 tmp 中。然后,使用 data // 2 进行整除操作得到下一个位置的二进制值。最后,通过 result = str(tmp) + result 将当前位置的二进制值转换为字符串,并添加到结果字符串 result 的前面。
当整数 data 为 0 时,循环终止,表示二进制转换完成。最后,我们使用 print(result) 将最终的二进制表示形式打印输出到控制台。
循环语句 for-in
一种专门处理字符串,元组,列表,字典等可迭代的序列类型数据的增强型 for 循环 for-in。
for-in 循环语法
for 迭代变量 in 对象:循环体
for-in
循环会将可迭代对象中的元素依次取出,保存到迭代变量中。
每取出一个变量,便执行一次循环体,在循环体中可以通过引用迭代变量,使用取出的数据。
遍历可迭代对象
使用for-in循环处理可迭代对象,可以使操作过程变的极其简单。
遍历字符串
for-in
循环会将字符串中的每个字符依次取出,放入迭代变量中。
格式:
for 变量 in 字符串:pass
示例: 输出前面示例中每个字符对应的ASCII码值。
s = "Hello Hogworts!"
for c in s:print(f"字符【 {c} 】的ASCII码为:【 {ord(c)} 】")
遍历元组
for-in 循环会将元组中的每个元素依次取出,放入迭代变量中。
格式:
for 变量 in 元组:pass
示例: 输出元组中每个数字的立方值
t = (1,2,3,4,5)
for n in t:print(f"数字【 {n} 】的立方值为:【 {n**3} 】")
遍历列表
for-in 循环会将列表中的每个元素依次取出,放入迭代变量中。
格式:
for 变量 in 列表:pass
示例: 将列表中所有的请求方式转换为大写输出
requestMethods = ["get", "post", "put", "delete", "patch", "header", "options", 'trace']
for method in requestMethods:print(f"请求方式【 {method} 】转换为大写后:【 {method.upper()} 】")
遍历字典
字典是一个比较特殊的数据类型,由 key-value 组成,在使用 for-in 遍历字典时,默认遍历的是字典的所有 key 。
如果需要遍历字典中的 value 或以 key-value 形式遍历,需要配合使用字典中对应的方法实现。
字典的默认遍历
for-in 循环在字典中依次取出每个元素的 key,放入迭代变量中。
格式:
for 变量 in 字典:pass
示例:
requestMethods = {"get": "用于获取服务器上的资源,通过在URL中传递参数来发送请求。","post": "用于向服务器提交数据,一般用于创建新的资源或进行修改操作。","put": "用于更新服务器上的资源,一般用于修改已存在的资源的全部内容。","delete": "用于删除服务器上的资源。"}
for method in requestMethods:print(method)
遍历字典中的所有 key
使用字典的 keys() 方法配合 for-in 循环可以遍历字典的所有 key,但一般不会这么操作。
格式:
for 变量 in 字典.keys():pass
示例:
requestMethods = {"get": "用于获取服务器上的资源,通过在URL中传递参数来发送请求。","post": "用于向服务器提交数据,一般用于创建新的资源或进行修改操作。","put": "用于更新服务器上的资源,一般用于修改已存在的资源的全部内容。","delete": "用于删除服务器上的资源。"}
for method in requestMethods.keys():print(method)
遍历字典中的所有 value
使用字典的 values() 方法配合 for-in 循环可以遍历字典的所有 value。需要注意的是,虽然可以取值,但对字典而言,这种操作也很少使用。
格式:
for 变量 in 字典.values():pass
示例:
requestMethods = {"get": "用于获取服务器上的资源,通过在URL中传递参数来发送请求。","post": "用于向服务器提交数据,一般用于创建新的资源或进行修改操作。","put": "用于更新服务器上的资源,一般用于修改已存在的资源的全部内容。","delete": "用于删除服务器上的资源。"}
for method in requestMethods.values():print(method)
遍历字典中的所有 key-value
字典中的一个完成的元素是以 key-value 形式体现的,如果要遍历字典中的所有元素,可以使用字典的 items() 方法配合 for-in 循环可以遍历字典的所有 key-vakue。
items() 方法取出的字典元素会以元组形式保存到迭代变量中,适当的场景下,可以使用解包操作,直接将元素中的 key-value 保存到对应的变量中。
格式:
for 变量 in 字典.items():pass# 或for 变量1, 变量2 in 字典.items():pass
示例:
r
equestMethods = {"get": "用于获取服务器上的资源,通过在URL中传递参数来发送请求。","post": "用于向服务器提交数据,一般用于创建新的资源或进行修改操作。","put": "用于更新服务器上的资源,一般用于修改已存在的资源的全部内容。","delete": "用于删除服务器上的资源。"}
for item in requestMethods.items():print(f"请求方式【 {item[0]} 】的作用为:【 {item[1]} 】")
配合解包操作,更简单的实现
requestMethods = {"get": "用于获取服务器上的资源,通过在URL中传递参数来发送请求。","post": "用于向服务器提交数据,一般用于创建新的资源或进行修改操作。","put": "用于更新服务器上的资源,一般用于修改已存在的资源的全部内容。","delete": "用于删除服务器上的资源。"}
for key, value in requestMethods.items():print(f"请求方式【 {key} 】的作用为:【 {value} 】")
小tips:编写一个Python程序,来计算给定文本中每个单词出现的次数。
text = """
Python is a popular programming language. It is widely used for web development, data science, and more.
Python has a simple and readable syntax, which makes it great for beginners.
"""
words = text.lower().split() # 将文本转换为小写并分割为单词
word_count = {} # 用于存储单词和出现次数的字典for word in words:word = word.strip(".,!?") # 去除单词中的标点符号if word in word_count:word_count[word] += 1else:word_count[word] = 1# 输出词频统计结果
for word, count in word_count.items():print(f"{word}: {count}")
小tips:
打印图案
正方形:
for i in range(5):for j in range(5):print("*", end=" ")print()
代码思路:
外部循环 for i in range(5): 运行 5 次,总共有5行。
内部循环 for j in range(5): 也运行 5 次,每行输出5个星号。
print(“*”, end=" “) - 在内层循环中,使用 print() 函数输出一个星号,同时指定 end=” " 参数,将每个星号之间的分隔符设置为两个空格,以保持图案的对齐。
print() 换行。
等腰三角形:
for i in range(5, 0, -1):for j in range(5 - i):print(" ", end=" ")for j in range(2 * i - 1):print("*", end=" ")print()