PY流程控制之for循环

PY流程控制之for循环

为什么有了while循环,还需要有for循环呢?不都是循环吗?for循环能够控制,而while不可控。

遍历list

# 取出列表中的值
lis = ['dapao',180,'male',['sing','dance','rap']]
for i in lis:
	print(i)
'''
dapao
180
male
['sing', 'dance', 'rap']
'''

遍历字典

字典也有取多个值的需求,字典可能有while循环无法使用了,这个时候可以使用我们的for循环。

dic = {'name': 'wzh', 'age': 19}

for i in dic:
    # 取出i的keys
    print(i)
'''
name
age
'''

简单遍历字典只能取出字典的key。下面是更骚的方法:

dic.items() # 取出字典的键值对
dic.key() # 取出字典的关键字
dic.value() # 取出字典的value值

按索引遍历

for循环的循环次数受限于容器类型的长度,而while循环的循环次数需要自己控制。for循环也可以按照索引取值。

# for循环按照索引取值
name_list = ['nick', 'jason', 'tank', 'sean']
for i in range(len(name_list)):
    print(i, name_list[i])
'''
0 nick
1 jason
2 tank
3 sean
'''

扩展—range()

range表示范围,顾头不顾尾,放在for循环里表示循环次数

range(5) # 0,1,2,3,4 
range(1,5) # 1,2,3,4
for i in range(1,4):
    print(i) # 1,2,3

for + break

与while + break一样,for循环跳出本层循环。

# for+break
name_list = ['nick', 'jason', 'tank', 'sean']
for name in name_list:
    if name == 'jason':
        break
    print(name) # 终止循环,只打印上一次循环的'nick'

for + continue

for循环跳出本次循环,进入下一次循环

# for+continue
name_list = ['nick', 'jason', 'tank', 'sean']
for name in name_list:
    if name == 'jason':
        continue
    print(name) # 跳出本次循环,打印'nick','tank','sean'

for循环嵌套

外层循环循环一次,内层循环循环所有的。

# for循环嵌套
for i in range(3):
    print(f'-----:{i}')
    for j in range(2):
        print(f'*****:{j}')
'''
-----:0
*****:0
*****:1
-----:1
*****:0
*****:1
-----:2
*****:0
*****:1
'''

for + else

for循环没有break的时候触发else内部代码块。

# for+else
name_list = ['nick', 'jason', 'tank', 'sean']
for name in name_list:
    print(name)
else:
    print('for循环没有被break中断掉')
'''
nick
jason
tank
sean
for循环没有break中断掉
'''

for循环实现loading......

import time

print('Loading', end='')
for i in range(6):
    print(".", end='')
    time.sleep(0.2) # 时钟休眠令该循环每隔0.2s执行一次

扩展—原位打印

/r可实现将打印结果覆盖上一次打印结果

# 进度条实例
import time
scale = 10
print("执行开始".center(scale // 2, "-"))
start = time.perf_counter()
for i in range(scale + 1):
    a = '*' * i
    b = '.' * (scale - i)
    c = (i / scale) * 100
    dur = time.perf_counter() - start
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end='')
    time.sleep(0.1)
print("\n" + "执行结束".center(scale // 2, '-'))
'''
-执行开始
100%[**********->]1.03s
-执行结束
'''

posted @ 2019-08-01 19:17  SweetJack  阅读(397)  评论(0编辑  收藏  举报