
for 语句, 常用于遍历字符串, 列表, 元组, 字典, 集合等序列类型, 逐个获取序列中的元素.
遍历: 是指沿着某条搜索路线, 依次全部访问.
格式:
for 迭代变量 in 可迭代对象:
代码块
结构:
* 1. for 关键字
* 2. 迭代变量, 用于接收从序列类型变量中读取出来的元素, 默认只能取一个元素.
变量名如果没有合适的名称 那么可以使用i, j, k, v, item等.
* 3. in 关键字
* 5. 可迭代对象+: 可迭代对象: 字符串|列表|元组|字典|集合|range 序列类型.
* 6. 代码块
* for 循环能够做的 while 循环都能做, 只不过实现方式稍微复杂.

str1 = 'abcd'
# 遍历字符串, 按索引 0 开始将一个个元素取出赋值给i.
for i in str1:
# 打印 i
print(i)

list1 = ['a', 'b', 'c', 'd']
# 遍历列表, 按索引 0 开始一个个元素取出来赋值给i.
for i in list1:
# 打印 i
print(i)

t1 = ('a', 'b', 'c', 'd')
# 遍历元组, 按索引 0 开始一个个元素取出来赋值给i.
for i in t1:
# 打印 i
print(i)

遍历有字典得到字典的key, 通过 字典[key] 将值取出.
Python 3.5 前字典是无序的, 需要注意取出的 key 是没有顺序的.
dict1 = {'name': 'kid', 'age': 18, 'hobby': 'read'}
# 变量字典, 将一个个Key取出赋值给k.
for k in dict1:
# 打印key
print(k)
# 变量字典, 将一个个Key取出赋值给k.
for k in dict1:
# 通过key取值
print(dict1[k])

交互环境下使用需要注意代码块的缩进.
输入连续行时, 显示次要提示符, 默认是三个点 (...) , 缩进后写代码块, 输入空行取消缩进结束代码块.

集合在存储值前会先去重.
集合是无序的, 输出是没有顺序的.
# 集合在存储值前会先去重
set1 = {11, 22, 33, 44, 11, 22, }
# 遍历集合的值
for i in set1:
print(i)

迭代变量, 用于接收从序列类型变量中读取出来的元素, 默认只能取一个元素.
如果元素是一个容器类型, 有多个值, 可以使用多个迭代变量获取.
dict1 = {'name': 'kid', 'age': 18, 'hobby': 'read'}
# [('name', 'kid'), ('age', 18), ('hobby', 'read')]
print(dict1.items())
# 变量字典, 将一个个Key取出赋值给k.
for item in dict1.items():
# 打印 item
print(item)
# 变量字典, 将一个个Key取出赋值给k.
for k, v in dict1.items():
# 打印 k, v
print(k, v)

range 是一种序列类型, 用于表示不可变的整数序列.
可用内置函数 range() 创建一个迭代器对象, 可以通过 list() 转换为列表.
无论多长的序列, range 对象占用得内存空间是一定的, 用到时才会计算序列中的元素.
三种调用方式:
* 1. range(stop): stop 终止位, 值是多少就在可迭代对象中创建多少个值, 值从0开始创建.
例: range(10) 创建一个可迭代对象, 包含整数 0 到 9.
Python 2 中是一个列表 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
* 2. range(start, stop): start 起始位, 值从起始位开始创建开始创建.
例: range(5, 10) 创建一个可迭代对象, 包含整数 5 到 9.
Python 2 中是一个列表 [5, 6, 7, 8, 9]
* 3. range(start, stop ,step): step 间隔, 创建值间隔 step 位, 默认是1位.
例: range(1, 10, 2) 创建一个可迭代对象, Python 2 中是一个列表 [1, 3, 5, 7, 9]
# 创建一个迭代对象
range_num = range(10)
# 对象在没有使用的时候占用的空间很小, 使用的时候才会计算产生的值并占用空间. 查看对象不会触发.生变化.
print(range_num)
# 将迭代对象转为列表
print(list(range_num))

# 创建一个迭代对象
range_num = range(5, 10)
# 将迭代对象转为列表
print(list(range_num))

# 创建一个迭代对象
range_num = range(1, 10, 2)
# 将迭代对象转为列表
print(list(range_num))

# 先创建整数序列, 在遍历获取整数序列中的值
for i in range(10):
print(i)

在 Python2 中 range() 直接生成一个列表, xrangr() 是迭代器.
Python3 中的 range() 就是 Python2 中的 xrange(), Python2 中 range() 直接被删除掉了.

直接生成一个列表, 列变所有对象一次性在内存中创建出来, 使用的内存大.
迭代器对象在没有被引用的时候, 就是一个生成序列对象的语句, ( 查看对象不会触发. )
在引用时触发这个语句, 才会计算需要产生的值, 占用一个数据的空间,
每次对象取出后, 就将空间给下一个新生成的对象使用, 就只占用一个数据的空间.
在 for 中 break 用于结束本层循环.
# 遍历整数序列 0-9
for i in range(10):
# i 等于 4, 执行break语句终止for 循环
if i == 4:
break
print(i)
print('程序结束!')

在 for 中 continue 用于结束本次循环.
# 遍历整数序列 0-9
for i in range(10):
# i 等于 4, 执行continue语句, 代码块执行到这里就结束了, 不往后面执行, 回到for循环的条件判断处.
if i == 4:
continue
print(i)
print('程序结束!')

for 循环还可以增加一个 else 从句, for 与 else 缩进相同.
当 for 循环正确执行完毕后结束循环之后, 会执行 else 的子代码.
如果, 被 break 语句中断的循环不执行 else 的子代码.
# 遍历 0-4
for i in range(5):
# i 等于 2 结束本次循环
if i == 2:
continue
# 打印 i
print(i)
# for 循环正常结束执行的语句
else:
print('for 循环正常结束!')

# 遍历整型序列
for i in range(3):
# 遍历整型序列
for x in range(3):
print(i, x)

设计一个程序打印九九乘法表.
# 遍历 1 到 9
for x in range(1, 10):
# 每次遍历 1 到 x+1
for y in range(1, x + 1):
# {:2} 占2位, 整理格式 | end=' ' 结尾符号设置为空格, 内循环在一行中打印
print(f'{x} * {y} = {x * y:2}', end=' ')
# 分行
print()

1. 设计一个程序将豆瓣top250的全部网址全打印出来.
豆瓣网电影top250
首页 https://movie.douban.com/top250
第二页 https://movie.douban.com/top250?start=25&filter=
第三页 https://movie.douban.com/top250?start=50&filter=
那么第一页首页推测为: (首页和这个地址都可以使用)
第一页 https://movie.douban.com/top250?start=0&filter=
往后推测:
第四页 https://movie.douban.com/top250?start=75&filter=
第五页 https://movie.douban.com/top250?start=100&filter=


# 豆瓣地址
url = r'https://movie.douban.com/top250?start=%s&filter='
# 0 - 250 间隔 25
for i in range(0, 250, 25):
print(url % i)
运行工具窗口显示:
https://movie.douban.com/top250?start=0&filter=
https://movie.douban.com/top250?start=25&filter=
https://movie.douban.com/top250?start=50&filter=
https://movie.douban.com/top250?start=75&filter=
https://movie.douban.com/top250?start=100&filter=
https://movie.douban.com/top250?start=125&filter=
https://movie.douban.com/top250?start=150&filter=
https://movie.douban.com/top250?start=175&filter=
https://movie.douban.com/top250?start=200&filter=
https://movie.douban.com/top250?start=225&filter=

# 2. for循环嵌套之打印99乘法表
for x in range(1, 10):
for y in range(1, x+1):
# <2 对齐默认不写就是空格
print(f'{x} x {y} = {x * y: <2}', end=' ')
print()
# 3. for循环嵌套之打印金字塔
"""
*
***
*****
*******
*********
***********
"""
for x in range(10):
print(' ' * (10-x), '*' * (1 + 2 * x))
# 4. 寻找1到100之间, 数字7最大的倍数, 使用for变量(结果是98)
# 定义一个变量
tem = 0
# 变量整型序列 1 - 100
for i in range(1, 101):
# i 对 7 求余 等于 0
if i % 7 == 0:
# i 的值比 tem 变量值大
if tem < i:
# 将 tem 引用 i 的值
tem = i
else:
print(tem)
# 整型序列(倒序)
for i in range(101, 1, -1):
if i % 7 == 0:
print(i)
break
文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.