Python 程序设计入门(020)—— 循环结构程序设计(1):for 循环
目录
一、for 循环的语法
for 循环是一个计次循环,适用于枚举或遍历序列和迭代对象中的元素,一般应用于循环次数已知的情况下。for 循环的语法格式如下:
for 迭代变量 in 对象:
循环体
说明:
(1)迭代变量:用于保存读取出的值。
(2)对象:要遍历或迭代的对象,可以是任何有序的序列对象,比如:字符串、列表、元组等。
(3)循环体:一组需要重复执行的语句。
(4)Python 采用代码缩进和冒号(:)区分代码层次。for 循环表达式行尾的冒号和下一行的缩进(通常采用 4 个空格作为一个缩进量)表示一个代码块的开始,缩进结束则表示一个代码块的结束。使用 for 循环时,必须严格按照缩进规则编写代码。
例如:
(1)提取出字符串中的数字、字母、英文符号与其他字符。
str1 = "ds3,3jH.iee/我fj*32的&号30U,码河。……H54南"
digit = ""
letter = ""
pun = ""
other = ""
for item in str1:
if ord(item) in range(48,58): # 数字的ASCII码为48-57
digit += item
elif ord(item) in range(65,91) or ord(item) in range(97,123): # 大写字母的ASCII码为65-90,小写字母的ASCII码为97-122
letter += item
elif ord(item) < 128: # 去除数字和字母
pun += item
else: # 其他字符(ASCII码大于127)
other += item
print("数字为:",digit)
print("字母为:",letter)
print("英文字符为:",pun)
print("其他字符:",other)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
数字为: 33323054
字母为: dsjHieefjUH
英文字符为: ,./*&
其他字符: 我的号,码河。……南
(2)遍历列表数据
list1 = ["Tom","Jerry","Kate","Black"]
for item in list1:
print(item)
print("="*30)
for item in range(len(list1)):
print(list1[item])
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
Tom
Jerry
Kate
Black
==============================
Tom
Jerry
Kate
Black
(3)遍历元组数据
tuple1 = (["Tom",20],["Jerry",22],["Kate",18],["Black",19])
for item in tuple1:
print("Name:",item[0],"\tAge:",item[1])
print("="*30)
for item in tuple1:
print("姓名:{}\t年龄:{}".format(item[0],item[1]))
print("="*30)
for item in tuple1:
for i in item:
print(i,end="\t")
print()
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
Name: Tom Age: 20
Name: Jerry Age: 22
Name: Kate Age: 18
Name: Black Age: 19
==============================
姓名:Tom 年龄:20
姓名:Jerry 年龄:22
姓名:Kate 年龄:18
姓名:Black 年龄:19
==============================
Tom 20
Jerry 22
Kate 18
Black 19
(4)遍历字典数据
dict1 = {
"Tom":20,"Jerry":22,"Kate":18,"Black":19}
for key in dict1.keys():
print("Name:{}\tAge:{}".format(key,dict1.get(key)))
print("="*30)
for item in dict1.items():
print("Name:{}\tAge:{}".format(item[0],item[1]))
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
Name:Tom Age:20
Name:Jerry Age:22
Name:Kate Age:18
Name:Black Age:19
==============================
Name:Tom Age:20
Name:Jerry Age:22
Name:Kate Age:18
Name:Black Age:19
二、for 循环中使用 range() 函数
for 循环通过迭代变量遍历对象中的每个元素。通过索引遍历对象时,经常使用 range() 函数,以生成一系列连续的整数。range() 函数的格式如下:
range([start,] end[, step])
说明:
(1)start:指定计数的起始值。如果省略,则从0开始计数。
(2)end:指定计数的结束值,该参数不能省略,当函数中只有一个参数时即表示技术的结束值。生成的序列不包括结束值。比如 range(5),生成的序列为[0-4],range(1,11),生成的序列为[1-10]。
(3)step:指定步长,即两个数之间的间隔,如果省略则步长为1。
(4)在使用 range() 函数时,如果只有一个参数,则指定的是end;如果有两个参数,则指定的是start和end;指定三个参数时,第一个参数为start,第二个参数为end,第三个参数为step。
例如:
(1)遍历列表元素
list1 = ["Tom","Jerry","Kate","Black"]
for i in list1:
print("{}".format(i),end="\t")
print()
print("="*30)
for i in range(len(list1)):
print("{}".format(list1[i]),end="\t")
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
Tom Jerry Kate Black
==============================
Tom Jerry Kate Black
(2)计算 5!(1*2*3*4*5)
f = 1
for i in range(1,6):
f *= i
print("5!结果为:",f)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
5!结果为: 120
(3)计算 1-100 中所有奇数的和
sum1 = 0
for i in range(1,101,2):
sum1 += i
print("1-100的和:",sum1)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
1-100的和: 2500
三、for … else 语句
for 循环可以添加一个 else 分支语句。只有当 for 循环语句正常执行后,才会执行 else 语句。如果 for 循环语句中遇到 break 或 exit(0) 语句,同时又符合跳出的条件,则不会执行 else 语句。for … else 语句的语法格式如下:
for <迭代变量> in <遍历结构>:
语句块1
else:
语句块2
说明:else 后面的语句会在 for 循环执行完成的情况下执行。
例如:
(1)else 语句被执行
代码如下:
num = 97
for i in range(2,int(num**0.5) + 1):
if num % i == 0:
break
else:
print("{}是一个素数。".format(num))
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
97是一个素数。
(2)else 语句没有被执行
num = 95
for i in range(2,int(num**0.5) + 1):
if num % i == 0:
print("{}不是一个素数。".format(num))
break
else:
print("{}是一个素数。".format(num))
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
95不是一个素数。
四、for 表达式
for 表达式可以利用迭代对象创建新的序列,for 表达式也称为序列递推式。语法格式如下:
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
例如:
(1)求 2-100 之间的素数
list1 = [2]
for i in range(3,101):
if 0 not in [i%j for j in range(2,int(i**0.5) + 1)]:
list1.append(i)
print(list1)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
(2)处理列表数据
list1 = ["Tom","Jerry","Kate","Black"]
list2 = ["Name:" + item for item in list1]
print(list2)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
['Name:Tom', 'Name:Jerry', 'Name:Kate', 'Name:Black']
(3)使用 zip() 函数组合多个列表
list1 = ["Tom","Jerry","Kate","Black"]
list2 = [21,20,18,19]
list3 = [name + ":" + str(age) for name,age in zip(list1,list2)]
print(list3)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
['Tom:21', 'Jerry:20', 'Kate:18', 'Black:19']
(4)for 表达式中使用条件
list1=[x ** 2 for x in range(1,10) if x % 2 == 0] # 返回1-9之间偶数的平方组成的列表
num = [2*x if x>=2 and x<=5 else x**2 for x in range(1,11)] # 如果x的值介于2和5之间返回 2*x,否则返回 x**2
print(list1)
print(num)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
[4, 16, 36, 64]
[1, 4, 6, 8, 10, 36, 49, 64, 81, 100]