[Python] 入门(6):Python 基础 -- 循环,条件和迭代器

Python 入门系列:

  • [Python] 入门(1):安装 Python 及必要组件
  • [Python] 入门(2):Python 基础 – 变量
  • [Python] 入门(3):Python 基础 – 内建函数
  • [Python] 入门(4):Python 基础 – 列表和词典的方法
  • [Python] 入门(5):Python 基础 – 字符串的方法
  • [Python] 入门(6):Python 基础 – Python 基础 – 循环,条件和迭代器(本文)
  • [Python] 入门(7):Python 基础 – 自定义函数
  • [Python] 入门(8):Python 基础 – 解析式,生成器和程序错误
  • [Python] 入门(9):Python 基础 – 字符串格式化
  • [Python] 入门(10):Python 基础 – 面向对象编程

for 循环

假如你有一个列表 lst = [“apple”, “pear”, “banana”, “orange”],想把每个水果名字都打印一遍,你会怎么做?你当然可以用 print(lst) 来做到,但是假如你想在每个水果前加一个序号呢?这就用到了 for 循环。

for 循环的基本语法是:

for 元素 in 可遍历对象/迭代器:
    元素的动作

for 循环的运行原理是:从对象里的第一个元素开始执行一个动作,然后是第二个元素执行相同的动作,…直到所有元素都执行了相同的动作,循环结束。**循环的主体(也就是第二行开始)需要缩进*,通常是四个空格(_ _ _ _)。**用一张图来表示:

现在我们来看一下如何把水果名字依次打印:

>>> for fruit in lst:
...     print(fruit)
apple
pear
banana
orange

*注:所有循环、条件和自定义函数的主体都需要缩进,缩进要么是四个连续的空格要么是一个 tab,但同一个主体里不能既有空格又有 tab,否则会报错。

现在来看稍微复杂一点的循环:在水果前加序号。还记得第三篇里提到的 enumerate 函数吗:

>>> for i, fruit in enumerate(lst, 1):
...    print(i, ": ", fruit, sep = "")
1: apple
2: pear
3: banana
4: orange

这里有几个小知识点:

  • enumerate函数默认从 0 开始,我们强制它从 1 开始;
  • print 函数默认可以同时打印多个变量,用 , 隔开即可;在变量之间默认有空格,我们设置 sep = "" 取消空格(否则打印出来:1_:__apple

while 循环

for 循环是有限循环,迭代完了可迭代对象,for 循环就停止了。while 循环不一样,它的运行原理是:运行前先判断该元素在一定条件下是否为真,如果为真,执行一个动作;判断下一个元素在同样条件下是否为真,如果为真,继续执行;…直到某元素在条件下为假,循环停止。用一张图来表示:

while 循环的语法是:

while 判断条件:
    动作

下面来举一个例子:用 while 循环打印所有小于 5 的正数。

>>> i = 1
>>> while i < 5:
...    print(i)
...    i += 1
1
2
3
4

首先我们先给了一个初始值 i = 1。然后代入 while 判断,1 < 5,条件成立,执行循环语句 打印 i。后面的 i += 1 把 i 加 1 变成 2(现在 i 是 2 了),返回循环的开始重新判断条件是否满足:2 < 5,满足,继续执行动作。直到 i 变成了 5,5 不小于 5,条件不满足了,循环停止。

while 循环有个隐患,那就是如果条件设置有问题,一直为真,这个 while 循环就会一直运行下去,直到内存耗尽,或者天荒地老…这种循环叫“无限循环”。下面的 while 循环就是一个例子:

>>> i = 1
>>> while True:
...    print(i)
...    i += 1

有人有胆运行一下吗?老宅是不敢,害怕电脑罢工,辛辛苦苦写的文档灰飞烟灭…

if 条件

假如你想出去旅游,但是下雨的话就不出去了。这可以用 if 条件来实现:

if 不下雨:
    旅游
else:
    待在家

if 条件的语法正是如此:

if 为真:
    执行一个动作
else:
    执行另一个动作

可是很多时候,条件不是非黑即白,可能是三选一,上面的 if 条件加一个 elif 即可:

if 为真:
    执行一个动作
elif 为真:
    执行另一个动作
else:
    执行另一个动作

如果是四选一,五选一…只要用足够的 elif 就可以了。来看一个示例:

>>> age = 20
>>> if age < 15:
...     print("小家碧玉")
... elif age < 30 and age >= 15:
...     print("大家闺秀")
... elfi age < 50 and age >= 30:
...     print("风韵犹存")
... else:
...     print("半老徐娘")
大家闺秀

如果一个变量同时满足 if 条件里的好几个条件,这个变量看谁?我们来试一试:

>>> a = 10
>>> if a < 15:
...     print("a < 15")
... elif a < 20:
...     print("a < 20")
... elif a < 25:
...     print("a < 25")
... else:
...     print("")
a < 15

看到了吧,如果变量到每一个条件满足了,它就忽略后面的条件了。所以 if 条件的工作流程是:

关于“if 条件”还有一个梗:

老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。”当晚,程序员老公手捧一个包子进了家门……老婆怒道:“你怎么就买了一个包子?”老公答曰:“因为看到了卖西瓜的。”

迭代器

老宅在前文中曾经比喻迭代器是“生产汤圆的机器”。迭代器一般可以由 iter 生成。有一个特殊的函数 next(),调用以后会返回下一个元素;如果所有元素已经返回,则返回 StopIteration 异常(异常在第八篇里会提到)。

>>> rng = iter(range(1))
>>> next(rng)
0
>>> next(rng)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-23-dd7cab303dc2> in <module>
      1 rng = iter(range(1))
      2 next(rng)
----> 3 next(rng)

StopIteration: 

嵌套

循环里套循环、条件里套条件、循环里套条件、条件里套循环都是可以的。

break 声明

有时候我们希望循环或条件提前结束,这时候就要用到 break 声明。举一个例子:依次打印 1-10,但在 5 停止(你有病啊!直接打印 1-5 不就好了!)。

>>> for i in range(1, 11):
...     if i < 6: # 循环里套条件
...         print(i)
...     else:
...         break
1
2
3
4
5

continue 声明

假如我们想在每个节点跳过执行,可以用 continue 声明。举一个例子:打印 1-5 以内的奇数。

>>> for i in range(1, 6):
...     if i % 2 == 1:
...        print(i)
...     else:
...        continue
1
3
5

练习(写出生成如下变量的代码或结果):

给定 1-10,假如可以被 2 整除,打印 foo;假如可以被 3 整除,打印 bar;如果可以被 6 整除,打印 foobar;其它数打印自己。

答案下篇文章公布。欢迎把答案留言与老宅交流、互动!


上一篇练习的答案:

# 给定一个字符串 str = "apple pear orange banana grape"(`\t` 代表缩进):
# 1. 在字母之间加 "-";
>>> str = " apple pear orange banana grape\t"
>>> str2 = "-"
>>> str3 = str.split() # 先分离
>>> str4 = str2.join(str3)
>>> str4
'apple-pear-orange-banana-grape'
# 2. 以 "strewbarry" 代替 "pear"。
>>> str.replace("pear", "strewbarry")
'apple strewbarry orange banana grape'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值