Python3-流程控制语句、迭代器、生成器

Python3-流程控制语句、迭代器、生成器

1. 介绍几个基本的脚本

# 斐波那契数列
# 前两个数字的和等于第三个数字
a,b = 0,1
while b<10:
    print(b)
    a,b = b,a+b    # 先计算出右边表达式,再同时赋值给左边变量

在这里插入图片描述

a,b = 0,1
while b<10:
    print(b,end=',')   # 将输出放到同一行,并在输出的结尾加上字符串
    a,b = b,a+b

在这里插入图片描述

2. if条件控制

# if语句格式:
if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3
    
# 每个条件后面都要有冒号:
# 一个代码块中所有语句的缩进都要相同,同一缩进才是同一代码块。

# if语句嵌套格式:
if 表达式1:
    语句
    if 表达式2:   # 嵌套的if语句
        语句
    elif 表达式3:
        语句
    else:
        语句
elif 表达式4:
    语句
else:
    语句
age = int(input("请输入你家狗狗的年龄: "))   # 输入一个值,并转换为整数
print("")
if age <= 0:
    print("你是在逗我吧!")
elif age == 1:
    print("相当于 14 岁的人。")
elif age == 2:
    print("相当于 22 岁的人。")
elif age > 2:
    human = 22 + (age - 2) * 5
    print("对应人类年龄: ", human)

### 退出提示
input("点击 enter 键退出")

在这里插入图片描述

if条件语句中常用运算符:

在这里插入图片描述

number = 7
guess = -1
print("数字猜谜游戏!")
while guess != number:
    guess = int(input("请输入你猜的数字:"))
 
    if guess == number:
        print("恭喜,你猜对了!")
    elif guess < number:
        print("猜的数字小了...")
    elif guess > number:
        print("猜的数字大了...")

在这里插入图片描述

num=int(input("输入一个数字:"))
if num%2==0:
    if num%3==0:
        print ("你输入的数字可以整除 2 和 3")
    else:
        print ("你输入的数字可以整除 2,但不能整除 3")
else:
    if num%3==0:
        print ("你输入的数字可以整除 3,但不能整除 2")
    else:
        print  ("你输入的数字不能整除 2 和 3")

在这里插入图片描述

3. while循环语句

# 单条件while循环语句
while 判断条件(condition):
    执行循环体语句(statements)
    
# python中没有do...while语句


# 多条件while循环语句
while <expr>:
    <statement(s)>
else:
    <additional_statement(s)>
n = 100

sum = 0
counter = 1
while counter <= n:   # while循环,条件正确则执行循环体
    sum = sum + counter
    counter += 1

print("1 到 %d 之和为: %d" % (n, sum))

在这里插入图片描述

var = 1
while var == 1 :  # 表达式永远为 true
   num = int(input("输入一个数字  :"))
   print ("你输入的数字是: ", num)
 
print ("Good bye!")

# 条件永远为True,重复执行循环体

在这里插入图片描述

count = 0
while count < 5:   # 小于5则执行循环体
   print (count, " 小于 5")
   count = count + 1
else:              # 大于等于5执行其他语句
   print (count, " 大于或等于 5")

在这里插入图片描述

# 循环体只有一条语句,可与while写在同一行
flag = 1
while flag == 1: print("努力,奋斗!")

在这里插入图片描述

4. for循环语句

for <variable> in <sequence>:
    <statements>
else:
    <statements>
a = [1, 2, 3, 4, 5]
b = 0
for i in a:
    print(i)
    b = b + i
    if i == 5:
        print('累加结束,请给出计算结果!')
        break      # break终止for循环,跳出整个循环。
else:
    print('a列表是一个空列表')
print('a列表的各数值的和为:', b)

# continue 跳出本次for循环,继续下次for循环

在这里插入图片描述
range()函数和len()函数实现for循环:
range():生成一个数列,可以使用list()或tuple()转换为列表或元组。格式:range(最小值,最大值,步长),最小值缺省默认0,步长缺省默认1,最大值不可缺省。数列中包含最小值,不包含最大值。
len():用于计算对象的长度

在这里插入图片描述

list1 = ['a', 'b', 'c', 'd']
print('列表list1的元素个数为:', len(list1))
for i in range(len(list1)):
    print(i,list1[i])

在这里插入图片描述

5. break和continue语句

break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。

continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

循环语句可以有 else 子句,它在穷尽列表(以for循环)条件变为 false (以while循环)导致循环终止时被执行,但循环被 break 终止时不执行

在没有break语句时,for循环或while循环中的else子句肯定会执行。

for letter in 'abong':    # 实例1
   if letter == 'b':
      break
   print ('当前字母为 :', letter)
  
var = 10
while var > 0:             # 实例2
   print ('当期变量值为 :', var)
   var = var -1
   if var == 5:
      break
 
print ("Good bye!")

在这里插入图片描述

for letter in 'abong':  # 实例1
    if letter == 'b':
        continue
    print('当前字母为 :', letter)

var = 10
while var > 0:  # 实例2
    var = var - 1
    if var == 5:
        continue
    print('当期变量值为 :', var)
    

print("Good bye!")

在这里插入图片描述

6. pass语句

Python中pass是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。

for letter in 'abong':
    if letter == 'o':
        pass    # 啥都不做
        print('执行 pass 块')
    print('当前字母 :', letter)

print("Good bye!")

在这里插入图片描述

7. 迭代器

7.1 用标准数据类型创建迭代器

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

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

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

迭代器有两个基本的方法:iter()next()。【前者创建迭代器,后者记住下一个元素】

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

介绍几个迭代器的用法:

list = ['a', 'b', 'c', 'd']
it = iter(list)  # 创建迭代器对象,这是next(it)指向第一个元素
i = 0
while i < len(list):
    print('第', i+1, '个元素是:', next(it))
    i += 1

在这里插入图片描述

list = ['a', 'b', 'c', 'd']
it = iter(list)  # 创建迭代器对象,这是next(it)指向第一个元素
i = 0
for a in it:
    print('第', i+1, '个元素是:', a)
    i += 1

在这里插入图片描述

import sys    # 导入模块
list=[1,2,3,4]
it=iter(list)   # 使用列表创建迭代器对象
while True:
    try:
        print(next(it), end=' ')
    except StopIteration:   # 异常处理,用于标识迭代的完成,防止出现无限循环的情况
        sys.exit()    # 退出循环

在这里插入图片描述

7.2 自定义迭代器

把一个作为一个迭代器使用需要在类中实现两个方法__iter__()__next__()

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

__next__() :返回下一个迭代器对象。

class MyNumbers:     # 定义一个新的数据类型MyNumbers,数字、字符串、列表、元组、集合、字典是标准的数据类型,即已经定义好的数据类型。
    def __iter__(self):   # 成员函数,self是指一个实例
        self.a = 1        # 成员变量a,赋值为1
        return self       # 返回值

    def __next__(self):   # 成员函数
        if self.a <= 20:  # 成员变量
            x = self.a    # 把变量a赋值给x
            self.a += 1   # 变量a加1
            return x      # 返回原来的变量a
        else:             # 当a的值大于20,就会引发异常,停止迭代。
            raise StopIteration


myclass = MyNumbers()   # 创建一个MyNumbers类型的实例,类比列表、元组
myiter = iter(myclass)  # 使用实例创建一个迭代器,这个和使用列表创建的迭代器使用方法一致.

for i in myiter:                # 此时的myiter就是一个迭代器,可以看作是带有坐标的列表。
    print(i, end=' ')

在这里插入图片描述

8. 生成器

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

生成器是一个返回迭代器的函数,只能用于迭代操作。

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

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

import sys


def fibonacci(n):  # 生成器函数,斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):   # 大于n就直接返回
            return
        yield a             # 否则保存a的值,即while循环体执行一次,就会返回一次a的值。
        a, b = b, a + b
        counter += 1


f = fibonacci(10)  # f是一个迭代器,由生成器生成并返回

while True:
    try:
        print(next(f), end=" ")
    except StopIteration:
        sys.exit()

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值