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对返回对象进行转换

相关推荐
drebander17 分钟前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
威威猫的栗子40 分钟前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
墨染风华不染尘1 小时前
python之开发笔记
开发语言·笔记·python
Dxy12393102161 小时前
python bmp图片转jpg
python
麦麦大数据2 小时前
Python棉花病虫害图谱系统CNN识别+AI问答知识neo4j vue+flask深度学习神经网络可视化
人工智能·python·深度学习
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
LKID体2 小时前
Python操作neo4j库py2neo使用之py2neo 删除及事务相关操作(三)
开发语言·python·neo4j
小屁孩大帅-杨一凡2 小时前
Python-flet实现个人视频播放器
开发语言·python·音视频
算家云2 小时前
快速识别模型:simple_ocr,部署教程
开发语言·人工智能·python·ocr·数字识别·检测模型·英文符号识别
Thomas_Cai2 小时前
Python后端flask框架接收zip压缩包方法
开发语言·python·flask