Python基础:循环结构

循环结构

循环结构(while)

  • 格式

    while 表达式:
        语句块

    执行流程:当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行语句块,然后返回表达式继续判断,直到表达式的值为假;若表达式的值为假,则直接跳过语句块,执行后面的内容。

  • 说明

    • 表达式:也叫循环条件

    • 语句块:也叫循环体

    • 死循环:循环条件一直为真

    • break:跳出循环

    • continue:结束本次循环,进入下次循环

    • else:else语句块在循环正常退出时执行,非正常(break)退出时不执行

  • 示例:人在江湖飘

    from random import randint
    from time import sleep
    ​
    print('人在江湖飘,哪能不挨刀...')
    print('人在江湖飘,哪能不挨刀...')
    ​
    while True:
        # 用于占位的空语句
        # pass
        jiege = randint(1, 5)
        feihu = randint(1, 5)
        # 做差
        cha = jiege - feihu
        # abs:求绝对值
        if abs(cha) == 1 or abs(cha) == 4:
            if cha == 1 or cha == -4:
                print('杰哥:{},飞虎:{},杰哥胜出,飞虎喝酒'.format(jiege, feihu))
            else:
                print('杰哥:{},飞虎:{},飞虎胜出,杰哥喝酒'.format(jiege, feihu))
            break
        else:
            print('不分伯仲,继续...')
    ​
        # 睡眠1秒
        sleep(1)

     

循环结构(for-in)

  • 说明:for-in也是一种循环结构,常用于对象的遍历,如:字符串、列表、元组、字典等

  • 格式:

    for x in y:
        语句块

    执行流程:x依次表示y中的一个元素,遍历结束循环也就结束了

  • 示例:

    # 遍历字符串
    for i in 'hello':
        print(i)
    ​
    # 遍历列表
    lt = [1, 2, 3]
    for i in lt:
        # 可以手动获取下标
        print(i, lt.index(i))
    ​
    # 遍历列表,可以直接使用下标
    for index, value in enumerate(lt):
        print(index, value)
    ​
    # 遍历字典
    d = {'a': 'apple', 'b': 'banana', 'c': 'car', 'd': 'dog'}
    for key in d:
        # 遍历的是键,值需要单独获取
        print(key, d[key])
    ​
    # for key, value in d.items():
    # 与上面的方式是等价的
    for key, value in dict.items(d):
        print(key, value)

     

列表生成式

  • 可迭代对象:可以迭代遍历的对象,如:列表、元组、字典等

  • range函数

    # range对象,保存的不是所有的数据,而是生成数据的算法
    # 指定终止值
    # r = range(10)
    # 指定起始、终止值
    # r = range(2, 10)
    # 指定起始、终止、步进
    r = range(2, 10, 2)
    ​
    # print(r, type(r))
    # 可以遍历
    for i in r:
        print(i)
    ​
    # 可以转换为列表
    print(list(r))
    列表生成式
    
    print([i for i in range(1, 11)])
    print([i*2 for i in range(1, 11)])
    print([i*i for i in range(1, 11)])
    print([str(i) for i in range(1, 11)])
    print([i for i in range(1, 11) if i % 2 == 0])
    print(['hello' for i in range(1, 11)])
    # 也可以生成集合
    print({i for i in range(1, 11)})
    # 还可以生成字典
    print({i: i for i in range(1, 11)})

     

  •  

循环嵌套

  • 循环能否嵌套?

    • 可以

  • 示例1:

    n = int(input('请输入一个整数:'))
    ​
    # 控制打印多上行
    for i in range(n):
        # 控制每一行打印多少个
        for j in range(i+1):
            print('*', end='')
        print()

     

  • 示例2:

    n = int(input('请输入一个整数:'))
    ​
    # 先控制行数
    for i in range(n):
        # 控制每一行的打印个数
        for j in range(i+1):
            print(j+1, end=' ')
        print()

     

  • 列表排序

    • 冒泡排序

    lt = [1, 5, 7, 2, 6, 3]
    # 冒泡排序:从小到大
    # 第一轮:1, 5, 2, 6, 3, 7
    # 第二轮:1, 2, 5, 3, 6
    ​
    n = len(lt)
    ​
    # 外层循环控制比较多少轮
    for i in range(n-1):
        # 内存循环控制每一轮怎么比较
        for j in range(n-1-i):
            if lt[j] > lt[j+1]:
                # 通用方式
                # temp = lt[j]
                # lt[j] = lt[j+1]
                # lt[j+1] = temp
                # python特有
                lt[j], lt[j+1] = lt[j+1], lt[j]
    ​
    print(lt)
    选择排序
    
    lt = [3, 5, 2, 8, 6, 4]
    # 选择排序:从小到大
    # 思想:从头开始,选取一个位置,让后面所有的元素都与其进行比较,不合适,发生交换
    # 第一轮:2, 5, 3, 8, 6, 4
    # 第二轮:2, 3, 5, 8, 6, 4
    # 第三轮:2, 3, 4, 8, 6, 5

    练习:自己实现选择排序

字典操作

  • 示例:

    d = {'name': 'dahua', 'age': 18}
    ​
    # 获取成员:当键不存在时会报错
    print(d['name'])
    # 获取成员:键存在返回对应的值,不存在返回None,可以指定默认值
    print(d.get('height', '默认值'))
    # 键存在返回对应的值,不存在先设置然后返回
    print(d.setdefault('height', 'xxx'))
    ​
    # 存在则修改
    d['name'] = '王大花'
    # 不存在则添加
    d['weight'] = 50
    # 存在的就覆盖,不存在的就添加
    # d.update(name='erhua', sex='女')
    d.update({'name': 'erhua', 'sex': '女'})
    ​
    # 删除
    del d['name']
    # 删除并返回
    print(d.pop('age'))
    # 随机弹出并返回一个键值对,一般是末尾的元素,字典为空会报错
    print(d.popitem())
    ​
    # 返回字典的所有键值对组成的元素集合,可以遍历、转换
    print(list(d.items()))
    ​
    # 清空字典
    d.clear()
    ​
    print(d)

练习

 

  • 计算1~100之间所有偶数的和

    i = 1
    s = 0
    while i <= 100:
        if i % 2 == 0:
            s += i
        i += 1
    print('2+4+...+100={}'.format(s))
    

    打印字符A~Z

  • i = ord('A')
    while ord('A') <= i <= ord('Z'):
        print(chr(i),end=' ')
        i += 1

    从终端输入10个字符,大写转小写,小写转大写,其他字符不变,然后输出

  • lt = [0 for i in range(10)]
    for i in range(10):
        c = input('输入字符:')
        if ord('A') <= ord(c) <= ord('Z'):
            lt[i] = chr(ord(c) + 32)
        elif ord('a') <= ord(c) <= ord('z'):
            lt[i] = chr(ord(c) - 32)
        else:
            lt[i] = '其他字符'
    print(lt)

    将12345转换为54321

  • s = str(12345)
    s = int(s[::-1])
    print(s)

    将12345转换为'12345',不要使用str

  • num = 12345
    s = ""
    while num:
        fnum = num%10
        s = chr(ord('0')+fnum) + s
        num //= 10
    print(s)
    

    将'12345'转换为12345,不要使用int

  • s3 = '12345'
    num = 0
    for i in s3:
        num = num * 10 + ord(i) - ord('0')
    print(num,type(num))

    遍历列表,打印:我叫name,今年age岁,家住dizhi,电话phone

  • lt = [
        {'name':'小王', 'age':18, 'info':[('phone', '123'), ('dizhi', '广州')]},
        {'name':'小芳', 'age':19, 'info':[('phone', '789'), ('dizhi', '深圳')]},
        {'name':'小杜', 'age':22, 'info':[('phone', '567'), ('dizhi', '北京')]},
        {'name':'小孟', 'age':28, 'info':[('phone', '000'), ('dizhi', '上海')]},
        {'name':'小乔', 'age':26, 'info':[('phone', '111'), ('dizhi', '河南')]},
    ]
  • lt = [
        {'name':'小王', 'age':18, 'info':[('phone', '123'), ('dizhi', '广州')]},
        {'name':'小芳', 'age':19, 'info':[('phone', '789'), ('dizhi', '深圳')]},
        {'name':'小杜', 'age':22, 'info':[('phone', '567'), ('dizhi', '北京')]},
        {'name':'小孟', 'age':28, 'info':[('phone', '000'), ('dizhi', '上海')]},
        {'name':'小乔', 'age':26, 'info':[('phone', '111'), ('dizhi', '河南')]},
    ]
    for i in lt:
        print('我叫{},今年{}岁,家住{},电话{}'.format(
            i.get('name'),
            i.get('age'),
            i.get('info')[1][1],
            i.get('info')[0][1])
        )

    打印九九乘法表

    for i in range(9):
        for j in range(i+1):
                print(i+1, '*', j+1,  '=', (i+1)*(j+1), end=' ')
        print()

    从终端输入两个整数m和n,打印m*n的表格,如:2,5,打印如下图形:

  • 1 2 3 4 5
    6 7 8 9 10
    
    m = int(input('输入整数m:'))
    n = int(input('输入整数n:'))
    num = 1
    for i in range(m):
        for j in range(n):
            print(num,end=' ')
            num += 1
        print()
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值