python基础:第二章:程序控制结构(条件、循环)

一、if、while、for、range

if

Python中if语句的一般形式如下所示:

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3

Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else

注意:

  • 1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。

  • 2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。

  • 3、在Python中没有switch – case语句。

  • 例题1

age = int(input("请输入狗狗的的年龄:"))
if age <= 0:
    print("你tnd在逗我")
elif age == 1:
    print("相当于14岁的人")
elif age == 2:
    print("相当于22岁的人")
else:
    human = 22 + (age-2)*5
    print("相当于%s岁的人"%human,end="")
    # print(f"相当于{human}岁的人")
  • 例题2
print("==== 猜数字游戏开始 ====")
number = 24
while 1:
    guess = int(input("请输入你猜测的数字:"))
    if guess==number:
        print("恭喜你猜对了!")
        break
    elif guess<number:
        print("再往大点猜!")
    else:
        print("再往小点猜!")
  • 例题3
num = int(input("请输入一个正整数:"))
while num<=0:
    num = int(input("请重新输入:"))
if num%2==0:
    if num%3==0:
        print(f"{num}既是2的倍数,也是3的倍数")
    else:
        print(f"{num}只是2的倍数,不是3的倍数")
else:
    if num%3==0:
        print(f"{num}只是3的倍数,不是2的倍数")
    else:
        print(f"{num}既不是2的倍数,也不是3的倍数")

while

注意:

  1. 在 Python 中没有 do…while 循环。

  2. while 1 可以进入无限循环,你可以使用 CTRL+C 来退出无限循环。

  3. 存在 while … else 语句,在条件语句为 false 时执行 else 的语句块。

  4. while 和 for 中都可以用 continue 和 break

  • 例题1
count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")
"""
0  小于 5
1  小于 5
2  小于 5
3  小于 5
4  小于 5
5  大于或等于 5
"""
  • 例题2
sum = 0
start,end = 1,100
count = start
while count <= end:
    sum += count
    count += 1
print("%d 到 %d 的和为:%d"%(start,end,sum))
  • 例题3
## Fibonacci数列
a,b = 0,1
while b<10:
    print(b)
    a,b = b,a+b
# 输出结果是:1行1个
# 如果我们想让结果在同一行显示,中间用,或者空格隔开呢?==》 end关键字

aa,bb = 0,1
while bb<10:
    print(bb,end=',')
    aa,bb = bb,aa+bb
print("")
# 输出结果是1,1,2,3,5,8,
# 但不太美观,我们想去掉最后一个,可以多加一个判断

aaa,bbb = 0,1
while bbb<10:
    if aaa+bbb<10:
        print(bbb,end=',')
    else:
        print(bbb)
    aaa,bbb = bbb,aaa+bbb
# 结果1,1,2,3,5,8

for

  • 例题1
languagues = ['C++','Java','Python','Go','Ruby']
for lan in languagues:
    # print(lan)
    if lan==languagues[-1]:
        print(lan)
    else:
        print(lan,end=',')
  • 例题2
sites = ["Baidu", "Google","Runoob","Taobao"]
#sites.clear()
for site in sites:
    if site == "Runoob":
        print("菜鸟教程!")
        break
    print("循环数据 " + site)
else:
    print("没有循环数据!")		# 如果sites里没有数据,就会直接转到else
print("完成循环!")

range

for x in range(5):	 	 # 从0开始,左闭右开
	print(x,end='') 	 # 结果:01234
    
for x in range(3,8): 	 # 限定start和end
    print(x,end='') 	 # 结果:34567   
    
for x in range(10,20,2): # 再补上步长
    print(x,end=',')	 # 结果:10,12,14,16,18,
    
for x in range(-1,-10,-2): 
    print(x,end=' ')	 # 结果:-1 -3 -5 -7 -9 
# list 配合上 len 配合上 for in
list = ['Google','MicroSoft','Apple','Alibaba']
for i in range(len(list)):
    print(i,list[i])
"""
0 Google
1 MicroSoft
2 Apple
3 Alibaba
"""

二、迭代器与生成器

迭代器

  1. 迭代是Python最强大的功能之一,是访问集合元素的一种方式。

  2. 迭代器是一个可以记住遍历的位置的对象。

  3. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

  4. 迭代器有两个基本的方法:iter()next()

  5. 字符串,列表或元组对象都可用于创建迭代器:

list = [1,2,3,4,5]
it = iter(list)
print(type(it))
print(next(it))
print(next(it))
"""
<class 'list_iterator'>
1
2
"""
  • 遍历方法1:迭代器对象可以使用常规 for 语句进行遍历:
list=[1,2,3,4]
it = iter(list)   		 # 创建迭代器对象
for x in it:
    print (x, end=" ")	 # 1 2 3 4 
  • 遍历方法2:可用sys模块中的 try…except 语句进行遍历:
import sys         # 引入 sys 模块
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
while True:
    try:
        print (next(it))
    except StopIterat:
        sys.exit()
  • 自己创建一个迭代器

    把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。

    如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 init(), 它会在对象初始化的时候执行。更多内容查阅:Python3 面向对象

    iter() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 next() 方法并通过 StopIteration 异常标识迭代的完成。

    next() 方法(Python 2 里是 next())会返回下一个迭代器对象。

    创建一个返回数字的迭代器,初始值为 1,逐步递增 1:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    x = self.a
    self.a += 1
    return x
 
myclass = MyNumbers()
myiter = iter(myclass)
 
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
"""
1
2
3
4
5
"""
  • StopIteration

    StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

    在 20 次迭代后停止执行:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    if self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
 
myclass = MyNumbers()
myiter = iter(myclass)
 
for x in myiter:
  print(x,end=' ')
"""
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
"""

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

以下实例使用 yield 实现斐波那契数列:

import sys
def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
 
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()
"""
0 1 1 2 3 5 8 13 21 34 55
"""
  1. 当 fibonacci 函数里出现了 yield 的时候,这个函数就变成了一个生成器,调用函数返回的就是一个 迭代器。

  2. 所以这里的 f 就相当于 前面例子中的 it

  3. 迭代器是用来遍历一组数据的,这组数据,就是 yield 后面的变量(即 a ) 在函数中经历的每一个值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值