• 1102、判断语句、while循环、for循环


    一、判断语句

    1、判断的定义

    • 如果 条件满足,才能做某件事情,
    • 如果 条件不满足,就做另外一件事情,或者什么也不做

    判断语句 又被称为 “分支语句”,正是因为有了判断,才让程序有了很多的分支

    2、if 语句语法结构

    • 标准if条件语句的语法
      在这里插入图片描述图例
      在这里插入图片描述只要表达式数字为 非零值 即为 True

    空字符串、空列表的值均为 False

    # 代码1:
    if 3 > 0:
        print('yes')
    print('ok')
    
    
    # 代码2:为0的数字都为False,True才执行;
    if -0.0:
        print('为0的数字都为False')
    else:
        print('值为0')
    
    
    # 代码3:空格是空字符串,为True,会打印; 
    if ' ':
        print('空格也是一个字符,为True')    
    
    
    # 代码4:[False]为列表,列表中元素是False,因为列表存在,为真会打印;
    if [False]: 
        print('非空列表,为真True')
    
    
    # 代码5:None为假,取反为真; 
    if not None:
        print('None为假,取反为真')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    练习 1:判断合法用户

    需求

    1. 创建 login2.py 文件
    2. 提示用户输入用户名和密码
    3. 获得到相关信息后,将其保存在变量中
    4. 如果用户输的用户名为 bob,密码为 123456,则输出 Login successful,否则输出 Login incorrect
    # 定义两个变量 username 和 password,分别从键盘获取用户名和密码
    username = input('请输入用户名:')
    password = input('请输入密码:')
    
    
    # 在python中等于号用 == 表示;input()函数获取的值都是字符类型,密码要用引号引起来
    if username == 'bob' and password == '123456':
        print('Login successful')
    else:
        print('Login inorrect')
    print(" Login end ")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、if 扩展语句

    (1)语法结构:

    if 条件1:
    	结果1
    elif 条件2:
    	结果2
    else:
    	结果3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    练习 2:编写判断成绩的程序

    需求

    1. 如果成绩大于60分,输出“及格”

    2. 如果成绩大于70分,输出“良”

    3. 如果成绩大于80分,输出“好”

    4. 如果成绩大于90分,输出“优秀”

    5. 否则输出“你要努力了”

    编写判断成绩的程序

    score = int(input('分数:'))  #将字符串数据转换成整数(强制类型转换)
    #程序的执行,是从上往下执行的;
    #先判断大的数值,不满足再继续往下判断,可以简化程序代码
    if score < 0 or score > 100:
        print("error")
    elif score >=90:
        print("优秀")
    elif score >=80:
        print("好")
    elif score >=70:
        print("良")
    elif score >=60:
        print("及格")
    else:
        print("你要努力了")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    练习 3:编写石头剪刀布小游戏

    需求:

    1. 计算机随机出拳
    2. 玩家自己决定如何出拳
    3. 代码尽量简化

    方法一:编写剪刀石头布小游戏

    import random   # 导入随机数的模块 random
    all_choices = ['石头','剪刀','布']   # 定义列表all_choices,存储出拳的每个选择
    
    # random模块的choice方法,可以从变量中随机选出一个元素,随机出来的元素为电脑的出拳
    computer = random.choice(all_choices)
    
    # 使用input()函数,获取用户的出拳选择
    player = input('请出拳(石头/剪刀/布):')
    
    # 使用函数print()打印出电脑和玩家的出拳选择
    print("Your choice:" + player + ", Computer's choice: " + computer)
    
    # 当玩家出拳为【石头】时,电脑的每一种出拳选择都要和【石头】进行比较,打印结果
    if player == '石头':
        if computer == '石头':
            print('平局')
        elif computer == '剪刀':
            print('You WIN!!!')
        else:
            print('You LOSE!!!')
    # 当玩家出拳为【剪刀】时,电脑的每一种出拳选择都要和【剪刀】进行比较,打印结果
    elif player == '剪刀':
        if computer == '石头':
            print('You LOSE!!!')
        elif computer == '剪刀':
            print('平局')
        else:
            print('You WIN!!!')
    # 当玩家出拳为【布】时,电脑的每一种出拳选择都要和【布】进行比较,打印结果
    else:
        if computer == '石头':
            print('You WIN!!!')
        elif computer == '剪刀':
            print('You LOSE!!!')
        else:
            print('平局')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    方法二:

    # 导入随机数的模块 random
    import random
    
    # 定义列表all_choices,存储出拳的每个选择
    all_choices = ['石头','剪刀','布']
    
    # 定义列表win_list, 将玩家赢电脑的选择,提前保存起来
    # 每个子列表中,玩家为第一个元素,电脑为第二个元素
    win_list = [['石头','剪刀'],['剪刀','布'],['布','石头']]
    
    # random模块的choice方法,可以从变量中随机选出一个元素
    # 随机出来的元素为电脑的出拳
    computer = random.choice(all_choices)
    
    # 使用input()函数,获取用户的出拳选择
    player = input('请出拳(石头/剪刀/布):')
    
    # 使用函数print()打印出电脑和玩家的出拳选择
    print("Your choice:" + player + ", Computer's choice: " + computer)
    
    # 如果玩家和电脑的出拳相同,则平局
    if player == computer:
        print('平局')
    # 如果[玩家,电脑]的列表,在win_list中,则可判断玩家赢,因为在win_list中定义了玩家赢得各种可能性   
    elif [player,computer] in win_list:
        print('You WIN!!!')
    # 玩家不是赢,那么就是输了,玩家所有赢得可能性已经在win_list定义了    
    else:
        print('You LOSE!!!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    #我自己的想法:
    import random
    all_choices= ['石头','剪刀','布']
    computer = random.choice(all_choices)
    print("computer:", computer)
    player = input('请出拳(石头/剪刀/布):')
    print("Your choice:" + player + "Computer's choice:" + computer)
    
    if player == computer:
        print("平局")
    elif ( player=='石头' and computer=='剪刀') or( player=='剪刀' and computer=='布')  or (player=='布' and computer=='石头'):
        print("player win~~")
    else:
        print("computer win~~")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    二、while 循环详解

    在程序开发中,一共有三种流程方式:

    • 顺序 —— 从上向下,顺序执行代码
    • 分支 —— 根据条件判断,决定执行代码的 分支
    • 循环 —— 让 特定代码 重复 执行

    在这里插入图片描述

    1、循环概述

    1. 一组被重复执行的语句称之为 循环体,能否继续重复,决定循环的终止条件
    2. Python 中的循环中 while 循环和 for 循环
    3. 循环 次数未知 的情况下,建议采用 while 循环
    4. 循环 次数可以预知 的情况下,建议采用 for 循环

    何时使用

    • 减少重复性代码,提高代码效率
    • 循环的作用就是让 指定的代码 重复的执行
    • while 循环最常用的应用场景就是 让执行的代码 按照 指定的次数 重复 执行

    格式:

    while 条件:
    	循环体
    
    • 1
    • 2

    注意

    • while 语句以及缩进部分是一个 完整的代码块

    案例:打印 5 遍 Hello World

    需求

    • 打印 5 遍 Hello World
    # 1. 定义重复次数计数器
    i = 1
    # 2. 使用 while 判断条件
    while i <= 5:
        # 要重复执行的代码
        print("Hello Python")
        # 处理计数器 i
        i = i + 1
    print("循环结束后的 i =", i)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意:循环结束后,之前定义的计数器条件的数值是依旧存在的

    案例:使用 while 循环计算1~100的和

    # 0. 定义最终结果的变量
    sum100 = 0
    # 1. 定义一个整数的变量记录循环的次数
    i = 1
    # 2. 开始循环,当 i 小于等于100时,循环执行while中的程序
    while i <= 100:
        # 每一次循环,都让 sum100 这个变量和 i 这个计数器相加
        sum100 += i
        # 处理计数器,控制循环次数
        i += 1
    print("0~100之间的数字求和结果 =", sum100)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    练习 1:完善石头剪刀布的游戏

    需求:

    1. 实现循环结构,要求游戏三局两胜

    【优化】实现循环结构,要求游戏三局两胜

    import random
    all_choices = ['石头','剪刀','布']
    win_list = [['石头','剪刀'],['剪刀','布'],['布','石头']]
    
    pwin = 0     #记录人胜利的次数 
    cwin = 0     #记录计算机胜利的次数
    
    while pwin < 2 and cwin < 2:
        computer = random.choice(all_choices)
        # 使用input()函数,获取用户的出拳选择
        player = input('请出拳(石头/剪刀/布):')
        # 使用函数print()打印出电脑和玩家的出拳选择
        print("Your choice:" + player + ", Computer's choice: " + computer)
    
        # 如果玩家和电脑的出拳相同,则平局
        if player == computer:
            print('平局')
        # 如果[玩家,电脑]的列表,在win_list中,则可判断玩家赢,因为在win_list中定义了玩家赢得各种可能性 
        elif [player,computer] in win_list:
            pwin += 1
            print('You WIN!!!')
        # 玩家不是赢,那么就是输了,玩家所有赢得可能性已经在win_list定义了    
        else:
            cwin += 1
            print('You LOSE!!!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    2、break、continue 和 else

    breakcontinue 是专门在循环中使用的关键字

    • break 某一条件满足时,退出循环,不再执行后续重复的代码
    • continue 某一条件满足时,跳过当前循环,不执行 continue 后续重复的代码

    breakcontinue 只针对 当前所在循环 有效

    (1)break

    • 在循环过程中,如果 某一个条件满足后 再希望 循环继续执行,可以使用 break 退出循环
    sum100 = 0
    counter = 1
    while counter <= 100:
        if counter  == 2:
            break
        sum100 += counter
        counter += 1
    print("退出循环")
    print(sum100)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    break 只针对当前所在循环有效

    图例
    在这里插入图片描述

    (2)continue

    • 当遇到 continue 语句时,程序会 跳过当前循环,并忽略剩余的语句,然后 回到循环的顶端
    • 如果仍然满足循环条件,循环体内语句继续执行,否则退出循环
    sum100 = 0
    counter = 1
    while counter <= 100:
        if counter  == 2:
            counter += 1
            continue
            print("continue下的语句不会执行")
        sum100 += counter
        counter += 1
    print("循环")
    print(sum100)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    图例
    在这里插入图片描述

    (3)else

    • python 中的 while 语句也支持 else 子句

    • else 子句只在循环完成后执行

    • break 语句也会跳过 else 块

    # 1.正常退出
    i = 1
    while i <= 10:
        print("i:", i)
        i += 1
    else:        #循环完成,else正常执行
        print("else ok")
    
    
    # 2.非正常退出
    i = 1
    while i <= 10:
        if i == 5:
            print("非正常退出(break)不会执行else的逻辑")
            break
        print("i:", i)
        i += 1
    else:        #不执行
        print("else ok")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    练习 5:猜数字程序

    需求

    1. 系统随机生成 100 以内的数字

    2. 要求用户猜生成的数字是多少

    3. 最多猜 5 次,猜对结束程序

    4. 如果5次全部猜错,则输出正确结果

    import random  # 调用随机数模块random
    number = random.randint(1,100)  # 从1~100范围内,取出一个随机数
    counter = 0  # 计数变量
    while counter < 5:  # 指定猜的次数,0 - 4,共5次 
        answer = int(input("guess(1-100) "))  # 用户输入的猜测答案
        if answer == number:  # 判断猜测是否正确,正确就打印,并退出while循环
            print('猜对了')     
            break              
        elif answer > number:  # 如果猜大了,打印,并继续执行while循环
            print('猜大了')
        else:  # 如果猜大了,打印,并继续执行while循环
            print('猜小了')
        counter += 1  # 每次猜数,counter自加1
    else:
        print('answer=', number)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、for 循环详解

    1、for 循环语法结构

    for 变量 in 可迭代对象:       #可迭代对象:字符串、列表
        for 循环逻辑
    
    • 1
    • 2

    案例:扫描商品

    # cart 表示购物车
    cart = ["巧克力派", "鱿鱼丝", "碎冰冰", "Python从入门到入坟"]
    
    # for 的逻辑:店员每次从 cart 中拿出一个 item 进行扫码
    for item in cart:
        print("扫码: " + item)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    从上述代码可以看出,购物车cart中有5件商品,所以for中的print逻辑执行了5次。for一般用于指定次数的循环逻辑中,一般情况下,循环次数未知采用while循环,循环次数已知,采用for循环。在for关键字后面跟的这个item变量,变量名是可以根据变量命名规则更改的。

    案例:计算购物车商品总价

    # cart_price 存放每个商品的价格
    cart_price = [10, 15, 20, 99.99]
    
    total_price = 0
    # for 循环做价格的累加
    for price in cart_price:
        total_price += price
    print("总价为: " + str(total_price))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、遍历以及迭代器

    (1)遍历

    我们如果把店员将购物车商品一件一件取出进行扫码的过程,比喻成将某个容器中的元素一个个取出然后进行后续操作,这个过程就叫做遍历。、

    遍历不仅限于列表,还适用于元组,字典和字符串类型。

    (2)可迭代对象

    **概念:**一个实现了__iter__方法的对象是可迭代对象,一个实现next方法的对象则是迭代器。

    **人话:**现阶段我们学过的可迭代对象有 字符串,列表,元组,集合,字典,range(),并且能被 for 循环的都是可迭代对象。

    案例:遍历字符串

    # 遍历字符串
    str01 = "hello world"
    for str_item in str01:
        print(str_item)
    
    • 1
    • 2
    • 3
    • 4

    3、for 循环特性

    break、continue、else

    关键字作用
    break结束当前循环
    continue跳出当次循环,记住执行下次循环
    else循环正常结束(非 break 退出),执行 else 逻辑

    (1)break 应用

    案例:打印列表中元素,遇到小于0的元素停止打印

    for item in [1, 2, 3, -4, 5, -6]:
        if item < 0:
            break
        print("item is: " + item)
    print("for循环外部:打印完毕")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    图例说明:
    在这里插入图片描述

    (2)continue 应用

    案例:计算列表中所有大于0的数字的和

    sum_for = 0
    for item in [1, 2, 3, -4, 5, -6]:
    	if item < 0:
            continue
    	sum_for += item
        print("加了一次~")
    print("for循环外部:计算完毕, sum: " + str(sum_for))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    图例说明:
    在这里插入图片描述

    4、range 函数

    range 函数是一个内建函数,它的返回值是一个半闭半开范围内的数字。for 循环常与range函数一起使用,range 函数为循环提供条件。

    语法结构
    在这里插入图片描述
    star:起始位置
    end:终止位置
    step:步长

    案例常规使用:

    >>> tmp = range(1, 10)
    >>> tmp
    range(1, 10)
    >>> len(tmp)
    9
    >>> list(tmp)
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> tmp01 = range(5)    #没有写起始位置从0开始
    >>> tmp01
    range(0, 5)
    >>> list(tmp01)
    [0, 1, 2, 3, 4]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    因为 range 函数的使用和切片比较类似,所以同样具有切片的使用特性:

    >>> tmp = range(1, 10, 2)       # 起始位置-->终止位置  是:从左向右  step是正的
    >>> list(tmp)
    [1, 3, 5, 7, 9]
    >>> tmp01 = range(10, 1, -2)    # 起始位置-->终止位置  是:从右向左  step是负的
    >>> tmp01
    range(10, 1, -2)
    >>> list(tmp01)
    [10, 8, 6, 4, 2]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    与 for 循环一起使用

    可以把 range 函数当成购物车,购物车中的商品是一个个范围内的数字,要想拿出里面的数字,就得遍历,所以 range 可以和 for 连用,可以控制循环次数。

    案例:打印 3 次"hello world"

    for i in range(3):
        print("第" + str(i) + "次:hello world")
    
    • 1
    • 2

    如果直接打印 “hello world”:

    for i in range(3):
        print("hello world")
    
    • 1
    • 2

    这里的变量 i 只是为了语法,在案例中没有实际意义,不写变量在语法层面会报错,这里的 range 只为控制循环次数。

    案例:作为序列的下标索引,获取元素

    # 打印下标为偶数的元素
    list01 = ["zhangsan", "lisi", "wangwu", "zhaoliu"]
    for i in range(len(list01)):  # len(list01): range(4) -> 0 1 2 3
        if i % 2 == 0:
            print(list01[i])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、列表解析

    它是一个非常有用、简单、而且灵活的工具,可以用来动态地创建列表

    (1)语法结构

    在这里插入图片描述说明

    这个语句的核心是 for 循环,它遍历可迭代对象的所有条目

    expr 表达式应用于序列的每个成员,最后的结果值是该表达式产生的列表。也就类似于我们从购物车中拿出1件商品,接下来要做的事情。

    案例:生成一个元素为 1~10 的列表

    for 循环方式:语法相对复杂,但是好理解

    list01 = []
    for i in range(1, 11):
        list01.append(i)
    print(list01)
    
    • 1
    • 2
    • 3
    • 4

    列表解析式

    list01 = [i for i in range(1, 11)]      # 逻辑和上边一样
    
    • 1

    列表解析式相对于for循环,只是变了一种结构,核心还是for循环,所以我们只需要关心语法即可。

    练习:将刚才的 list01 列表的基础上对其中的每个元素加 1

    list01 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    list01 = [i+10 for i in list01]
    print(list01)    # 11,12,13,14,15,16,17,18,19,20
    
    • 1
    • 2
    • 3

    综合练习for

    练习:斐波那契数列

    1. 斐波那契数列就是某一个数,总是前两个数之和,比如 0,1,1,2,3,5,8
    2. 使用for循环和range函数编写一个程序,计算有10个数字的斐波那契数列
    3. 改进程序,要求用户输入一个数字,可以生成用户需要长度的斐波那契数列

    版本一

    fib = [0,1]  # 定义列表,指定斐波那契数列的初始两个值
    for i in  range(8):  # for循环执行8次,列表fib中的元素个数变为10【初始2个 + 新增的8个】
        fib.append(fib[-1] + fib[-2])  # 列表追加,每次都是最后一个元素和倒数第二个元素相加,产生新的元素
    print(fib)  # 打印列表fib
    
    • 1
    • 2
    • 3
    • 4

    版本二:编写可以指定长度的斐波那契数列程序

    fib = [0,1]  # 定义列表,指定斐波那契数列的初始两个值
    n = int(input('长度: '))  # 定义变量n, 此变量为用户要看到的列表fib中的元素个数
    # for循环执行n-2次,for循环执行多少次,列表fib会新增多少个元素
    # 因为列表fib本身有两个初始值,所以要产生n-2个数字
    for i in  range(n - 2):    
        fib.append(fib[-1] + fib[-2])  
    print(fib)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    FreeRTOS 基于 ARMv8-M 对 MPU 的应用
    从MatePad Pro进化看鸿蒙OS的生态势能
    【科普向】5G核心网架构和关键技术
    【项目】基于C++11实现的数据库连接池
    浙江大学数据结构陈越 第一讲 数据结构和算法
    spring-boot-starter-security的简单使用
    MySQL中binlog备份脚本分享
    2022/8/9 考试总结
    AcWing_第 78 场周赛
    站在供应链全局视角来了解服装行业
  • 原文地址:https://blog.csdn.net/weixin_56619848/article/details/124871438