python基础教程八(循环1)

1. while循环

为避免多次重复的代码,我们会用到循环

while (condition):

执行语句

while循环的结构非常简单只要条件满足就一直循环直到,条件不满足为止。

例子如下:

python 复制代码
x=1
while x<=100:
	print(x)
	x+=1

结果就是最简单的输出1-100的数字

while循环适合那种没有确定次数,变化规律不是很明显,只是知道何时应该停止的循环。如果知道具体次数那就更适合下面这种循环for

2. for循环

while语句非常灵活,可在条件为真时反复执行代码块。,但有时你可能想根据需要进行定制。一种这样的需求是序列(或其他可迭代对象)中每个元素执行的代码块

复制代码
注意:基本上可迭代对象是可使用for循环进行遍历的对象。

为此,可使用for语句:

python 复制代码
>>> words=['this','is','an','ex','parrot']
>>> for word in words:
...     print(word)
...
this
is
an
ex
parrot

1. range

鉴于迭代(也就是遍历)特定范围的内的数是一种常见的任务,python提供了一个创建范围的内置函数range

python 复制代码
>>> range(0,10)
range(0, 10)
>>> list(range(0,10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

范围类似于切片。它们包含起始位置(这里为0)但不包含结束位置(这里为10)。在很多情况下,你都希望起始为0.实际上,如果只提供一个位置,将把这个位置视为结束为止,并假定起始位置为0

python 复制代码
>>> range(0,10)
range(0, 10)

下面的程序打印数1~100:

python 复制代码
for i in range(1,101):
	print(i)

注意,相比前面的while循环,这些代码紧凑的多。

练习用for循环画正五角星

python 复制代码
#王八默认朝右边

from turtle import *
lt(72)
for i in range(1,6):
	fd(100)
	rt(144)



input("图已经画完请按回车关闭")

2. 迭代字典

复制代码
要遍历字典的所有关键字,可像遍历序列那样使用普通的for语句
python 复制代码
d={'x':1,'y':2,'z':3}
for key in d:
    print("{}'s value={}".format(key,d[key]))

====================== RESTART: E:\python\python练习\字典遍历.py =====================
x's value=1
y's value=2
z's value=3
复制代码
也可以使用keys等字典方法来获取所有的键。如果只对值感兴趣,可以使用d.values.
你可能记得,d.items以元组的方式返回键值对。这是for循环的有点之一,可在其中使用序列解包
python 复制代码
a={1:2,3:4}
for i,j in a.items():
    print(i,j)


输出为
1 2
3 4

字典元素的排序顺序是不确定的。如果顺序很重要,可将键或值存储在一个列表中并对列表排序,再进行迭代。

3. 一些迭代工具

1. 并行迭代

有时候,你想同时迭代俩个序列。假设有下面俩个列表:

names='zhangsan','lisi','damon','beth'

ages=12,12,23,11

如果打印名字和对应的年龄,可以像下面这样做:

python 复制代码
for i in range(len(name)):
	print(name[i],age[i])

i是作为循环索引的标准名称。一个很有用的并行迭代工具是内置函数zip 它将俩个序列缝合起来,并返回一个由元组组成的序列。返回值是一个适合的迭代对象,可使用list将其转换为列表

python 复制代码
names=['zhangsan','lisi','damon','beth']
ages=[12,12,23,11]
print(list(zip(names,ages)))



输出为:
[('zhangsan', 12), ('lisi', 12), ('damon', 23), ('beth', 11)]

缝合后,可在循环元组解包。

python 复制代码
names=['zhangsan','lisi','damon','beth']
ages=[12,12,23,11]
for name,age in zip(names,ages):
    print(name,age)


输出为:

zhangsan 12
lisi 12
damon 23
beth 11

函数zip可以用于缝合任意的序列。需要指出的是,当序列的长度不同时,函数zip在最短的序列用完后停止缝合。

2. 迭代时获取索引

在有些情况下,你需要知道迭代序列的同时获取当前对象的索引。例如,你可能想替换一个字符串列表所有包含子串'xxx' 的字符串,当然,完成这种任务的方法有很多,但这里假设要这样做:

python 复制代码
for string in strings:
	if 'xxx' in string:
		index=strings.index(string)
		string[index]='[censored]'
	

这可行,替换前的搜索好像没有必要。另外返回的索引可能不对(即返回的是该字符串首次出现处的索引)。另一种方案是使用内置函数enumerate

python 复制代码
s=['123','2312','23213','xxxew']
for index,string in enumerate(s):
    if 'xxx' in string:
        s[index]='hahah'
print(s)
input()
3. 反向迭代和排序后再迭代

来看另外俩个很有用的函数,reversed和sorted。曾经在列表那里浅显的说过他们,但可用于任何序列和可迭代的对象,且不就地修改对象,而是排列反转后和排序后的版本。

python 复制代码
>>> sorted([4,3,6,8,3])
[3, 3, 4, 6, 8]
>>> sorted('hello,world')
[',', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
>>>
>>> list(reversed('hello,world'))
['d', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'h']
>>> ''.join(reversed('hello world'))
'dlrow olleh'
>>>

请注意,sorted返回一个列表,而reversed像zip那样返回一个更神秘的迭代对象,你无需关心到底是什么,只管在for循环或join方法等中使用它,不会有任何问题。只是你不能对它执行索引或切片操作,也不能直接对它调用列表方法。要执行这些操作,可先使用list对返回对象进行转换

相关推荐
benchmark_cc13 小时前
用 QuantDash 读取单只股票五档盘口:抽样、缺失值检查与复现记录
python·数据分析·pandas·量化交易·股票数据·quantdash
曲径海盗13 小时前
【Python 学习第 55 天】列表基础
python·学习笔记·编程入门
专注仿真13 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
jyOverQ14 小时前
我写了一个 CSDN Markdown 图片助手:告别本地图片逐张上传
python·工具·csdn
刘马想放假17 小时前
CANviz 使用指南|Linux 安装、DBC 解码、实时曲线与 J1939 实战
linux·python·websocket
2601_9679873718 小时前
python判断变量名不要调用任何函数实现
python·函数·语法·判断·变量名
卷无止境19 小时前
SALib敏感性分析的python库学习笔记
后端·python
duansamve20 小时前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?
python·docker·flask
特立独行的猫A20 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
特立独行的猫A20 小时前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GB
java·后端·python