Python之range函数和for循环

本文介绍了Python中的range()函数,包括如何生成数字序列、创建和遍历列表,还涉及冒泡排序算法的实现。此外,详细讨论了for循环的用法,如break和continue语句、遍历字典、嵌套循环以及使用else分支的情况。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值