Python 循环

Python 循环

for

  • 语法

    for 变量 in 序列:
        循环体
    
  • 说明

    • for, in - 关键字,固定写法
    • 变量 - 可以是已定义的变量,也可以是没有定义的变量,建议使用没有定义的变量
    • 序列 - Python中的容器型数据类型,常见的容器型数据类型:列表、字典、集合、元组、字符串。至今为止,暂时只接触了字符串,后续学习继续补充
    • : - 固定写法
    • 循环体 - 与for保持一个缩进,参与循环执行的代码内容
  • 执行过程

    我们可以看作变量是自己,序列就是一筐篮球,循环体就是起手、投篮、落手的动作。每次投球,变量在序列里一次取球,然后完成起手、投篮、落手的动作。

    forin 一筐篮球:
        起手
        投篮
        落手
    
    for i in 'JerryHM11':
        print(i, 'hello world')
    
    """
    i = 'J': print(x, 'hello world!') -> print('J', 'hello world')
    i = 'e': print(x, 'hello world!') -> print('e', 'hello world')
    ...
    i = '1': print(x, 'hello world!') -> print('1', 'hello world')
    """
    
    [Out]
    J hello world
    e hello world
    r hello world
    r hello world
    y hello world
    H hello world
    M hello world
    1 hello world
    1 hello world
    

    将该循环过程看作投篮过程,可以有助于我们的理解。

  • range() - 用于产生你指定范围的数值序列

    • range(M) - 产生一个[0, M)的数值序列,步长为1
    • range(M, N) - 产生一个[M, N)的数值序列,其中N > M,步长为1
    • range(M, N, step) - 产生一个[M, N)的数值序列,其中步长为step
    # 打印出100~200以内的所有个位数为3的数
    # ---- 方法1 ---- #
    for i in range(100, 200):
        if i % 10 == 3print(i, end=' ')
    
    [Out]
    103 113 123 133 143 153 163 173 183 193
    
    # ---- 方法2 ----#
    for i in range(103, 200, 10):
    	print(i, end=' ')
    
    [Out]
    103 113 123 133 143 153 163 173 183 193
    

while

  • 语法

    while 条件语句:
        循环体
    
  • 说明

    • while - 关键字,固定写法
    • 条件语句 - 循环过程中参与判断是否进行后续循环的条件代码
    • : - 固定写法
    • 循环体 - 与while保持一个缩进,参与循环执行的代码内容
  • 执行过程

    程序运行至while循环时,判断条件语句是否为True,若为,则执行循环体中的内容,执行完毕后,再回到while循环中,进行判断是否进入循环中,否则,则跳出循环,结束循环操作。

    # 请输入一个值,当值为0时,跳出循环,否则一直输入
    value = input('请输入:')
    while value != '0':
        value = input('请输入:')
    

循环关键字

continue
  • 功能:结束一次循环/结束当前循环
    如果执行循环体的时候遇到了continue,那么当次循环直接结束,直接进入下一次循环
for x in range(4):
    print('====')
    continue
    print('++++')
    print('----')
    
[Out]
====
====
====
====
break
  • 功能:break - 结束整个循环
    如果在执行循环过程中遇到break,整个循环直接结束
for i in range(4):
    print('====')
    break
    print('++++')
    print('----')

[Out]
====
else
  • 功能:else结构的存在不影响原来循环的执行
    当循环自然死亡,else后的代码段会执行;
    如果循环遇到break结束,代码段不执行。
for i in range(4):
    print(i, '====')
    if i == 2:
        break
else:
    print('else')
    
[Out]
0 ====
1 ====

练习

基础题
  1. 使用for和while循环输出 0~100内所有3的倍数。

    # for
    for i in range(0, 100, 3):
        print(i, end=' ')
    print('\n')
    
    # while
    num = 0
    while num <= 100:
        print(num, end=' ')
        num += 3
    
  2. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数。

    # for
    for i in range(100, 200):
        if i % 10 % 3 == 0 or i // 10 % 10 % 3 == 0:
            print(i, end=' ')
    print('\n')
    
    # while
    num = 100
    while num < 200:
        if num % 10 % 3 == 0 or num // 10 % 10 % 3 == 0:
            print(num, end=' ')
        num += 1
    
  3. 统计100~200中十位数是5的数的个数

    num = 0
    for i in range(150, 160):
        num += 1
    print('100~200中十位数是5的数的个数为:', num, sep='')
    
  4. 打印50~150中所有能被3整除但是不能被5整除的数

    for i in range(51, 150, 3):
        if i % 5 != 0:
            print(i, end=' ')
    
  5. 计算50~150中所有能被3整除但是不能被5整除的数的和

    sum_num = 0
    for i in range(51, 150, 3):
        if i % 5 != 0:
             sum_num += i
    print('和为:', sum_num, sep='')
    
进阶题
  1. 使用循环计算1*2*3*4*...*10的结果。

    product = 1
    for i in range(1, 11):
        product *= i
    print(product)
    
  2. 统计100以内个位数是2并且能够被3整除的数的个数。

    sum_num = 0
    for i in range(2, 100, 10):
        if i % 3 == 0:
            sum_num += 1
    print('个数为:', sum_num,sep='')
    
  3. 输入任意一个正整数,求他是几位数?

    注意: 这儿不能使用字符串,只能用循环

    x = int(input('请输入数字:'))
    order = 1    # 位数
    while True:
        if x // (10 ** order) != 0:
            order += 1
        else:
            break
    print('这个数是{}位数'.format(order))
    
  4. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

    ⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。

    for i in range(100, 1000):
        if (i % 10) ** 3 + (i // 10 % 10) ** 3 + (i // 100) ** 3 == i:
            print(i, end=' ')
    
挑战题
  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

    x = 13
    if x == 1:
        print(x, '既不是素数也不是合数', sep='')
    elif x== 2:
        print(x, '是素数', sep='')
    else:
        for i in range(2, x):
            if x % i == 0:
                print(x, '不是素数', sep='')
                break
        else:
            print(x, '是素数', sep='')
    
  2. 求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)

    n = 5
    if n == 1 or n == 2:
        print('斐波那契数列中第{0}个数的值为:{1}'.format(n, 1))
    else:
        num1 = 1; num2 = 1
        for i in range(n - 2):
            num = num1
            num1 = num2
            num2 = num + num2
        print('斐波那契数列中第{0}个数的值为:{1}'.format(n, num2))
    
  3. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

    for i in range(1, 10):
        for j in range(1, 10):
            print('{0}x{1}={2}\t'.format(i, j, i*j), end=' ')
        print('')
    
  4. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)

    for i in range(33):    # 大马最多33匹
        for j in range(50):    # 中马最多50匹
            if 3 * i + 2 * j + 0.5 * (100 - i - j) == 100:
                print('大马{0}匹,中马{1}匹,小马{2}匹'.format(i, j, 100 - i - j))
    
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值