python基础教程八(循环1)

发布时间:2024年01月08日

1. while循环

为避免多次重复的代码,我们会用到循环
while (condition):
执行语句

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

x=1
while x<=100:
	print(x)
	x+=1

结果就是最简单的输出1-100的数字
在这里插入图片描述
while循环适合那种没有确定次数,变化规律不是很明显,只是知道何时应该停止的循环。如果知道具体次数那就更适合下面这种循环for

2. for循环

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

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

为此,可使用for语句:

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

1. range

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

>>> range(0,10)
range(0, 10)
>>> list(range(0,10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

>>> range(0,10)
range(0, 10)

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

for i in range(1,101):
	print(i)

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

练习用for循环画正五角星

#王八默认朝右边

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



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

在这里插入图片描述

2. 迭代字典

要遍历字典的所有关键字,可像遍历序列那样使用普通的for语句
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循环的有点之一,可在其中使用序列解包
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]
如果打印名字和对应的年龄,可以像下面这样做:

for i in range(len(name)):
	print(name[i],age[i])

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

names=['zhangsan','lisi','damon','beth']
ages=[12,12,23,11]
print(list(zip(names,ages)))



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

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

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’ 的字符串,当然,完成这种任务的方法有很多,但这里假设要这样做:

for string in strings:
	if 'xxx' in string:
		index=strings.index(string)
		string[index]='[censored]'
	

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

s=['123','2312','23213','xxxew']
for index,string in enumerate(s):
    if 'xxx' in string:
        s[index]='hahah'
print(s)
input()

3. 反向迭代和排序后再迭代

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

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

文章来源:https://blog.csdn.net/qq_44063802/article/details/135445664
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。