Python学习06:for循环语句的介绍和实战训练
笔者:风起怨江南 出处:https://blog.csdn.net/JackMengJin 笔者原创,文章欢迎转载,如果喜欢请点赞+关注,感谢支持!
目录
for循环语句的介绍和实战训练
在之前的Python的学习中,已经掌握了字符串、列表、元组、数字、还有if从句等等,但一直没有具体将它们组合起来使用。在学完整个循环语句后,就可以写出一个复杂的程序。本讲主要内容是——for循环。
一、for循环介绍
for 语句是 Python 中执行迭代的两个语句之一,另一个语句是 while。Python 中for 循环用于遍历一个迭代对象的所有元素。Python中的迭代:for、while、break、以及continue都是迭代语句。等多迭代相关的知识会在之后迭代学习中详细说明。
1.0 模块导入
在开始for循环前,先引入一个概念:模块导入。
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
在Python里导入模块通常用import + module,这里以:
import somemodule
或者:
from somemodule import somefunction
再或者:
from somemodule import somefunction,anotherfunction,yetanotherfunction
再再或者:
from somemodule import *
如果确定要导入模块中的一切时,采用最后一种方法。
如果两个模块都包含函数open(),则可以使用第一种方法导入这两个模块,并像下面调用函数:
import module1
import module2
module1.open(...) module2.open(...)
还有一种方法:
在语句末尾添加as子句并指定别名:
import math as custom_name
print(custom_name.sqrt(4))
2.0
导入特定函数并指定别名:
from math import sqrt as custom_name1
print(custom_name1(4))
2.0
关于模块导入这部本内容先点到为止,后续单独出Python模块专讲再详细说明。
1.1 for循环定义
Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
在for循环格式中,迭代变量用于存放从序列类型变量中读取出来的元素,所以一般不会在循环中对迭代变量手动赋值;代码块指的是具有相同缩进格式的多行代码(和 while 一样),由于和循环结构联用,因此代码块又称为循环体。
- for循环格式
for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块
根据for循环格式和流程图,以上一讲元组的内容进行举例:
tuple_fruits = ('apple','pear','peach','jujube','banana','cherry','hami melon','watermelon','litchi')
for fruit0 in tuple_fruits:
print(fruit0)
apple
pear
peach
jujube
banana
cherry
hami melon
watermelon
litchi
可以从打印中看到,for循环遍历了tuple_fruits元组里所有的元素。
同样的,对字符串,列表都可以进行for循环遍历:
#for循环遍历列表
list_names = ['Jack','Rose','Kobe','James','Jane','King','Bill','Jone','Mary','May','Tina']
for name0 in list_names:
print(name0)
Jack
Rose
Kobe
James
Jane
King
Bill
Jone
Mary
May
Tina
也就是当用 for 循环遍历 list 列表或者 tuple 元组时,其迭代变量会先后被赋值为列表或元组中的每个元素并执行一次循环体。
1.2 range()函数的用法
range()函数是 Python 内置函数,用于生成一系列连续整数,多用于 for 循环中。
- range()函数
python range() 函数可创建一个整数列表,一般用在 for 循环中。
range(start, stop[, step])
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
比如通过for循环对0到10之间的整数进行遍历:
for number0 in range(0,11):
print(number0)
0
1
2
3
4
5
6
7
8
9
10
可以看到这个示例程序中,range() 只是打印数字 1~10,因为range() 函数的用法是:让 Python 从指定的第一个值开始,一直数到指定的第二个值停止,但不包含第二个值(这里为 11)。
还需要注意的是,range()函数返回值类型为range:
print(type(range(1,20)))
<class 'range'>
如果想要得到 range() 函数创建的数字列表或数字元组,还需要借助 list() 函数和,比如:
print(type(range(1,20)))
list_number = list(range(1,20))
print(type(list_number))
tuple_number = tuple(range(1,20))
print(type(tuple_number))
<class 'range'>
<class 'list'>
<class 'tuple'>
range()函数步长的用法,步长为2:
#range()函数步长用法
for number in range(1,10,2):
print(number)
1
3
5
7
9
1.3 for循环进行数值循环
用for循环进行数值循环在Python里是最基本的应用。进行数值循环时,一般会用到range()函数。
- 打印出24~73范围之间所有的奇数:
#打印出24~73范围内所有的奇数
range_number = range(23,74,2)
for number0 in range_number:
print(number0)
23
25
27
29
31
33
35
37
39
41
43
45
47
49
51
53
55
57
59
61
63
65
67
69
71
73
- 打印出1~100范围以内的可以被三的整除的整数:
#打印出1~100范围以内的可以被三的整除的整数
range_number1 = range(3,100,3)
for number1 in range_number1:
print(number1)
3
6
9
12
15
18
21
24
27
30
33
36
39
42
45
48
51
54
57
60
63
66
69
72
75
78
81
84
87
90
93
96
99
- 创建一个列表,其中包含1~10范围内所有整数的平方(利用到列表相关知识):
#创建一个列表,其中包含1~10范围内所有整数的平方:
list0 = [] #创建一个空列表
range_number0 = range(1,11) #声明一个储存数字范围1~10的变量
for number0 in range_number0:
number_square0 = number0 ** 2 #声明一个变量用来储存迭代变量number0的平方
list0.append(number_square0) #利用方法append动态地创建列表
print(list0)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
二、for循环实战训练
2.1 计算1~1000的所有整数和
#计算1~1000的所有整数的和
sum = 0 #定义求和的结果为sum,初始为0
for i in range(1,101): #rang(1000)产生一个1~100的整数范围
sum += i #相当于sum = sum + i进行累加
print(sum)
5050
2.2 九九乘法表
首先定义一个乘数x,即每一行中不变的那个数;定义一个被乘数y,即每一行的乘以乘数x,依次递增1,但不超过x的数。
然后print被乘数、乘数、积的相关信息,当乘数增加1时,输出一个换行:
#乘法表
for x in range(1,10): #x是乘数
for y in range(1,x + 1): #y是被乘数
print(x,"x",y,'=',x*y,'\t',end = '')
print('')
1 x 1 = 1
2 x 1 = 2 2 x 2 = 4
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25
6 x 1 = 6 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36
7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49
8 x 1 = 8 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64
9 x 1 = 9 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81
通过函数参数看到print()函数里面是默认换行的,具体换行参数是end="\n"。
如果我们把参数end="\n"换成end=''相当于去掉了换行符\n。
在windows系统中,\n表示换行,n是new line 的缩写,\r表示回到行首,表示回车。
计算机还没有出现之前种叫做电传打字机的设备,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
这就是“换行”和“回车”的来历。后来这两个概念也就被般到了计算机上。那时存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧:Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”。
2.3 两行代码查找替换3或5或7的倍数
列出1~100的数字,若是3的倍数就用three代替,如果是5的倍数就用five代替, 是3又是5的倍数就用fifteen代替,若是7的倍数就用seven代替,若是3的倍数又是7的倍数就用twenty-one代替,若是5的倍数又是7的倍数就用thirty-five代替:
#列出1~100的数字,若是3的倍数就用three代替,如果是5的倍数就用five代替,
#即是3又是5的倍数就用fifteen代替,若是7的倍数就用seven代替,若是3的倍数又是7的倍数就用twenty-one代替,
#若是5的倍数又是7的倍数就用thirty-five代替
range_number = range(1,101)
for i in range_number:
if i%3 == 0 and i%15 !=0 and i%21 != 0:
print("three")
elif i%5 == 0 and i%15 !=0 and i%35 != 0:
print("five")
elif i%3 == 0 and i%5 == 0:
print("fifteen")
elif i%7 == 0 and i%21 != 0 and i%35 != 0:
print("seven")
elif i%21 == 0:
print("twenty-one")
elif i%35 == 0:
print("thirty-five")
else:
print(i)
1
2
three
4
five
three
seven
8
three
five
11
three
13
seven
fifteen
16
17
three
19
five
twenty-one
22
23
three
five
26
three
seven
29
fifteen
31
32
three
34
thirty-five
three
37
38
three
five
41
twenty-one
43
44
fifteen
46
47
three
seven
five
three
52
53
three
five
seven
three
58
59
fifteen
61
62
twenty-one
64
five
three
67
68
three
thirty-five
71
three
73
74
fifteen
76
seven
three
79
five
three
82
83
twenty-one
five
86
three
88
89
fifteen
seven
92
three
94
five
three
97
seven
three
five
2.4 打印G盘下s1文件里的内容
#打印G盘下s1文件内容
for text0 in open("G:\\s1"):
print(text0)
hostname KYLAND-SWITCH
user add admin level admin service console telnet ssh web authen-type password 202cb962ac59075b964b07152d234b70
!!
snmp-server enable
snmp-server community rw private
snmp-server community ro public
snmp-server v3-view add snmpv3 include 1.3.6.1.4.1.26067 ff ff ff ff
snmp-server enable traps
!!
authentication dot1x local
authentication telnet login local
authentication web login local
authentication ssh login local
!!
!#Vlan 1
vlan 1
!--
!$$1,26
!>Interface Ethernet1/1
port-mtu mtu 10056
port-security enable
!--
!>Interface Ethernet1/2
port-mtu mtu 10056
port-isolation
!--
!>Interface Ethernet1/3
port-mtu mtu 10056
!--
!>Interface Ethernet1/4
port-mtu mtu 10056
!--
!>Interface Ethernet1/5
port-mtu mtu 10056
!--
!>Interface Ethernet1/6
port-mtu mtu 10056
2.5 组成不同的四位数
有1,2,3,4,5,6,7七个数字,求这四个数字能生成多少个互不相同且无重复数字的四位数。
#有1,2,3,4,5,6,7七个数字,求这四个数字能生成多少个互不相同且无重复数字的四位数。
count = 0
for i in range(1,8):
for x in range(1,8):
for y in range(1, 8):
for z in range(1, 8):
if i != x and i != y and i != z:
count += 1
print(count)
1512
2.6 用户登陆
用户登陆需求:1.输入用户名和密码;2.判断用户名和密码是否正确(用户名为admin,密码为123);3.登陆仅有三次机会,超过3次会报错。
#用户登陆需求:
# 1.输入用户名和密码;
# 2.判断用户名和密码是否正确(用户名为admin,密码为123);
# 3.登陆仅有三次机会,超过3次会报错
print('欢迎来到用户登陆界面'.center(50,'*'))
#记录登陆次数
try_count = 0
for i in range(3):
#输入用户名和密码
user_input = input("请输入用户名:")
pwd_input = input("请输入密码:")
#每次输入登陆次数加1
try_count += 1
#正确用户存放在元组里
tuple_user = ('admin','123')
if user_input == tuple_user[0] and pwd_input == tuple_user[1]:
print('输入正确,登陆成功!')
#登陆成功则退出系统
break
else:
print('输入错误,请重新登陆!')
#总的次数为3,剩余次数即为(3-登陆次数)
print('你还有%s次机会' %(3 - try_count))
else:
print('很抱歉,三次机会已经用完,无法再继续登陆!')
********************欢迎来到用户登陆界面********************
请输入用户名:admin
请输入密码:122
输入错误,请重新登陆!
你还有2次机会
请输入用户名:admin
请输入密码:124
输入错误,请重新登陆!
你还有1次机会
请输入用户名:admin
请输入密码:123
输入正确,登陆成功!
********************欢迎来到用户登陆界面********************
请输入用户名:ad
请输入密码:123
输入错误,请重新登陆!
你还有2次机会
请输入用户名:ad
请输入密码:123
输入错误,请重新登陆!
你还有1次机会
请输入用户名:123
请输入密码:ads
输入错误,请重新登陆!
你还有0次机会
很抱歉,三次机会已经用完,无法再继续登陆!
更多for循环实例在后续学习中再详细讨论,下一讲while循环的用法。
以上便是《Python学习06讲》的所有内容,更多python学习请继续关注我的博客——风起怨江南(传送门),不定期更新,原创不易,如果喜欢请点赞和关注,谢谢大家的支持!
获得更多免费的学习资料请添加微信公众号——风起怨江南,谢谢大家的关注和支持!