Python之range函数和for循环
range() 函数
生成数字序列
使用 range() 函数可以生成数字序列,可以使用单个参数、两个参数、三个参数。
函数原型:range( start, end, step )
计数从 start 开始,默认是从 0 开始
计数到 end 结束,但不包含 end
步长为 step ,默认为1。如果步长为负数,且初始值大于终止值,则产生一个递减的序列
# 单个参数的应用
for i in range(6):
print(i,end = ' ')
>>>0 1 2 3 4 5
# 两个参数的应用
for i in range(5,10):
print(i,end= ' ')
>>>5 6 7 8 9
# 三个参数的应用
for i in range(5,0,-1):
print(i,end = ' ')
>>>5 4 3 2 1
for i in range(-1,-10,-2):
print(i,end = ' ')
>>>-1 -3 -5 -7 -9
创建、遍历列表
创建列表:
list(range(1,10,2))
>>>[1, 3, 5, 7, 9]
遍历列表:
list_a = ['a', 'b', 'c', 'd']
for i in range(len(list_a)):
print(i, list_a[i])
>>>0 a
1 b
2 c
3 d
冒泡排序
冒泡排序的基本思想:通过两两相邻数据元素之间的比较和交换,不断地消去逆序(如果存在某个元素大于它的后一个元素,则称为存在一个逆序),直到所有数据元素以非递减顺序排列为止。
# 冒泡排序
a = [31, 21, 53, 32, 67, 82, 43]
for i in range(len(a)-1, 0, -1):
for j in range(0, i):
if a[j] > a[j + 1]:
a[j], a[j+1] = a[j+1], a[j]
print(a)
>>>[21, 31, 32, 43, 53, 67, 82]
具体每次循坏的排序过程如下:
a = [31, 21, 53, 32, 67, 82, 43]
for i in range(len(a)-1, 0, -1):
print('i:',i)
for j in range(0, i):
if a[j] > a[j + 1]:
print('j:',j)
a[j], a[j+1] = a[j+1], a[j]
print(a)
print('---------------')
输出结果:
i: 6
j: 0
[21, 31, 53, 32, 67, 82, 43]
---------------
j: 2
[21, 31, 32, 53, 67, 82, 43]
---------------
j: 5
[21, 31, 32, 53, 67, 43, 82]
---------------
i: 5
j: 4
[21, 31, 32, 53, 43, 67, 82]
---------------
i: 4
j: 3
[21, 31, 32, 43, 53, 67, 82]
---------------
i: 3
i: 2
i: 1
第一次的外层循环(i = 6)确保其内层循环交换后列表的最后一个元素是最大值,第二次的外层循环(i = 5)确保确保其内层循环交换后列表的倒数第二个元素是列表中第二大的值,以此类推,外层循环遍历完,就可以得到非递减的列表了。
注意的是:
for i in range(1):
print(i)
>>>0 # 输出结果为 0 !!!
for i in range(0):
print(i)
>>> # 输出结果为空!!!
for 循环
break
break 语句用来终止循环。如果有两层循环或者多层循环,break 退出最内层循环。
while True:
name = input('\n请输入姓名:(输入 q 退出)')
if name == 'q':
break
for n in name:
if n == '小':
break
print(n, end = '')
print('退出循环!')
输出结果:
请输入姓名:(输入 q 退出)张三
张三
请输入姓名:(输入 q 退出)李小四
李
请输入姓名:(输入 q 退出)q
退出循环!
continue
continue 用于中断本次循环,继续执行下一次循环。
# 打印 100 以内的奇数
for i in range(101):
if i % 2 == 0:
continue
print(i, end = ' ')
输出结果:
1 3 5 7 9 11 13 15 17 19 21 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 75 77 79 81 83 85 87 89 91 93 95 97 99
遍历字典
months = {'January':1, 'February':2, 'March':3, 'April':4, 'May':5}
for key in months:
print(f"{key}:{months[key]}月", end = ' ')
>>>January:1月 February:2月 March:3月 April:4月 May:5月
for 循环嵌套
"""九九乘法表"""
for i in range(1,10):
if i == 1:
print("1*1=1 ")
else:
s = ''
for j in range(1,i+1):
s += f"{j}*{i}={j*i} "
print(s)
输出结果:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
for 循环使用 else 分支
for 循环有一个可选的分支 else ,在循环迭代正常完成之后执行。也就是说,如果以正常的方式退出循环,则执行 else 分支;但如果循环体内执行了 break 语句,return 语句而退出循环,或者有异常而退出循环,则不会执行 else 分支。
注:如果循环所迭代的序列是空的,else 分支依然会被执行。
s = ['a', 'b', 'c', 'd']
for i in s:
if i == 'c':
print('Yes!')
break
else:
print('Oh!')
print('完成循环!')
>>>Yes!
完成循环!
for i in {}:
print(i)
else:
print('Oh!')
>>>Oh!
一个相关的练习题:
获得用户的非数字输入,如果输入中存在数字,则要求用户重新输入,直至满足条件为止,并输出用户输入字符的个数。
while True:
s = input("请输入不带数字的文本:")
for i in range(10):
if str(i) in s:
break
else:
break
print(len(s))
输入值及输出结果:
请输入不带数字的文本:as1234
请输入不带数字的文本:1234
请输入不带数字的文本:abcds
5
本文介绍了Python中的range()函数,包括如何生成数字序列、创建和遍历列表,还涉及冒泡排序算法的实现。此外,详细讨论了for循环的用法,如break和continue语句、遍历字典、嵌套循环以及使用else分支的情况。
187

被折叠的 条评论
为什么被折叠?



