python循环结构

本文详细介绍了Python的循环结构,包括for、while循环,range()函数,以及continue和break关键字的使用。通过实例解析了各种循环的语法结构,并提供了练习题以巩固理解。对于for循环,强调了在已知循环次数时的适用性;而while循环适用于循环次数不确定的情况。此外,还探讨了何时选择使用while或for循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环结构

​ 循环: 让代码重复执行。(代码写一遍,程序可执行多次)

1. for

​ for 循环可以遍历任何可迭代对象,如一个列表或者一个字符串、range()函数等。

1.1 语法结构

语法:

for 变量 in 序列:
循环体
else:
代码段

参数说明:

for、 in – 关键字、固定写法;
变量 – 写一个变量名。(可以是定义过的,也可是没定义的);
序列 – 容器型数据类型对应的数据,常见序列:字符串、列表、元组、字典、集合、迭代器、生成器、range;
:(冒号) – 固定写法;
循环体 – 和for保持一个缩进的一条或者多条语句; 就是需要重复执行的代码;
else – 可选项,循环完成后执行,存在不影响循环执行;
代码段 – 循环完后所执行的代码,不写else则不存在;

执行过程:

​ 让变量去序列中取值,一个一个的取,取完为止,每取一个值执行一次循环体。取完后如果存在else则执行下面的代码段。
​ for循环的循环次数和序列中元素的个数有关。

实例1 - 语法使用

​ 以下 for 实例中使用了 break 语句(用法在下面章节),break 语句用于跳出当前循环体:

sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
    if site == "Runoob":
        print("条件达到,跳出循环则不会执行else!")
        break
    print("循环数据 " + site)
else:
    print("没有循环数据!")
print("完成循环!")

'''
---输出结果---
循环数据 Baidu
循环数据 Google
条件达到,跳出循环则不会执行else!
完成循环!
'''
实例2 - 练习

​ 以下使用range()函数来生成序列(用法在后面章节);以下将使用到的变量:count = count1 = num = sum = 0

# 练习1. 20以内的偶数
print('---打印100以内的偶数:---')
for i in range(0, 20, 2):
    print(i, end='\t')
"""
输出结果:
---打印100以内的偶数:---
0	2	4	6	8	10	12	14	16	18	
"""

# 练习2. 统计100内偶数的个数
count = count1 = num = sum = 0
for i in range(0, 100, 2):
    count += 1
print('100以内偶数的个数有:',count)
"""
输出结果:
100以内偶数的个数有: 50
"""

# 练习3. 计算1+2+3+...+100的和
for i in range(1,101):
    num += i
print('1~100所有数的和:',num)
"""
输出结果:
1~100所有数的和:5050
"""

# 练习4. 计算所有水仙花数的和
for num in range(100, 1000):
    a = num // 100
    b = num // 10 % 10
    c = num % 10
    shu = a**3 + b**3 + c**3
    if shu == num:
        sum += num
        print(shu, end=' ')
print('所有水仙花的和:', sum)
"""
输出结果:
153 370 371 407 所有水仙花的和: 1301
"""

2. range()函数

​ range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。

​ range()函数 - 产生指定范围的数字序列

2.1 语法结构

语法:

range(stop)
range(start, stop[, step])

参数说明:

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

实例
# 练习2:打印100-200间个位是3的数
print('\n---打印个位数是3的数:---')
for i in range(103, 200, 10):
    print(i, end=' ')
"""
执行结果:
---打印个位数是3的数:---
103 113 123 133 143 153 163 173 183 193 
"""

3. while

3.1 语法结构

语法:

while 条件语句:
循环体
else:
代码段

参数说明:

while - 关键字,固定写法;
条件语句 - 任何有结果的表达式(赋值除外);
: - 固定写法;
循环体 - 和while保持一个缩进的一条或多条语句,需重复执行的代码;
else - 可选项,while条件不成立时执行,存在不影响循环执行;
代码段 - 条件不成立执行,跟随else执行共生;

执行过程:

​ 先判断条件,条件成立执行循环体,执行完循环体再次判断条件,成立则再次执行循环体,依次类推,直到条件不成立结束,如果结束存在else语句,执行依次else下的代码段

while循环控制次数的原则:让条件经历过指定次数后由True变成False

实例
user = input('请输入接头暗号: ')
while user != '有内鬼终止交易':
    print(user)
    user = input('请输入接头暗号: ')
else:
    print('交易终止')
"""
执行结果:
请输入接头暗号: 土豆哪里挖
土豆哪里挖
请输入接头暗号: 一挖一麻袋
一挖一麻袋
请输入接头暗号: 有内鬼终止交易
交易终止
"""

4.循环关键字

​ 作用:用于退出循环,只能用于循环体

continue - 结束本次后续循环体开始执行下次循环,会继续执行else语句

break - 结束运行整个循环,并且也不会执行else语句

4.1 continue

continue - 结束一次循环/结束当次循环

如果在执行循环体的时候遇到了continue,那么当次循环结束,直接进入下一次循环

4.2 break

break - 结束整个循环

如果在执行循环体的时候遇到了break,整个循环直接结束

实例
# 练习1:输出0-10数字,5和8不输出 (continue应用)
for x in range(10):
    if x == 5 or x == 8:
        continue
    print(x, end='\t')
"""
执行结果:
0	1	2	3	4	6	7	9	
"""

# 练习2:输出0-10数字,到3时停止输出  (break应用)
for x in range(10):
    print(x, end='\t')
    if x == 3:
        break
"""
执行结果:
0	1	2	3	
"""

# 练习3:随意输入,直到输入0结束程序  (break应用)
while True:
    value = input('请输入:')
    if value == '0':
        break
"""
执行结果:
请输入:学习
请输入:随便
请输入:0

进程已结束,退出代码为 0
"""     

5. while和for的选择

for循环:循环次数确定的时候使用

while循环:循环次数不确定的时候使用

练习题

基础题

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

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

    # 1)for
    print("100~200内个位或十位能被3整除的数有:")
    for i in range(100, 200):
        if i%10 % 3 == 0 or i//10%10 % 3 == 0:
            print(i, end='\t')
    # 2) while
    count = 100
    print("\n100~200内个位或十位能被3整除的数有:")
    while count < 200:
        if count % 10 % 3 == 0 or count // 10 % 10 % 3 == 0:
            print(count, end='\t')
        count += 1
    
  3. 统计100~200中十位数是5的数的个数

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

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

    sum1 = 0
    print('50-150中被3整除不被5整除的数的和:')
    for i in range(51, 150, 3):
        if i % 5 != 0:
            sum1 += i
    print(sum1)
    

进阶题

  1. 使用循环计算1*2*3*4*...*10的结果。

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

    count = 0
    for i in range(2, 100, 10):
        if i % 3 == 0:
            count += 1
    print('100内个位是2并能被3整除的数的个数: ', count)
    
  3. 输入任意一个正整数,求他是几位数?

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

    number = int(input('输入一个正整数:'))
    con = 0
    while number:
        con += 1
        number //= 10
    print('输入的正整数的位数是:', con)
    
  4. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

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

    print('\n---水仙花数:---')
    for num in range(100, 1000):
        a = num // 100
        b = num // 10 % 10
        c = num % 10
        shu = a**3 + b**3 + c**3
        if shu == num:
            print(shu, end=' ')
    

挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

    prime = int(input('请输入判断是否为素数的数:'))
    for i in range(2,int(prime ** 0.5)+1):
        if not prime % i:
            print('这个数不是质数!')
            break
    else:
        print('输入的这个数是质数!')
    # 在一个数平方根之前没找到能整除的数,则这个数是质数
    
  2. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)

    n = int(input('请输入想求第多少位斐波那契数列:'))
    f1 = f2 = fn = 1
    if n == 1 or n == 2:
        print('第',n , '位的斐波那契数列值为:1')
    else:
        for i in range(3,n+1):
            fn = f1 + f2
            f1 = f2
            f2 = fn
    print('第',n , '位的斐波那契数列值为:',fn)
    
  3. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

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

    for i in range(0,34):
        for j in range(0, 50):
            for z in range(0,200):
                if i+j+z == 100 and i*3 + j*2 + z*(1/2) == 100:
                    print(i,j,z)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜡笔丶没了小新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值