循环语句 for while

本文介绍了Python中的for和while循环,包括它们的语法、执行过程和应用场景。for循环常用于遍历序列,如字符串、列表等,while循环则根据条件不断执行循环体。文章还提到了continue和break语句的用法,并给出了多个练习题来加深理解。

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

循环语句

众所周知,Python并没有大多语言常见的switch循环;具体什么原因网上有很多回答,如果大家感兴趣可以去了解。本文主要浅谈for循环与while循环。

循环特征:让代码重复执行(代码写一次);降低代码冗余度。

for循环

语法

for 变量 in 序列:

循环体

说明

​ for、in — 保留字,固定写法

​ 变量 — 变量名(已定义或未定义均可)

​ 序列 — 容器型数据类型对应的数据,常见的有:字符串、列表、元组、字典、集合、迭代器、生成 器、range

​ : — 固定写法

​ 循环体 — 与for保持缩进的一条或多条语句

执行过程

​ 让变量去序列中取值,一个一个的取,取完为止,每取一个值执行一次循环体。

​ for循环次数与序列中的元素个数有关

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

  1. range(N):产生[0,N)的数字序列。左闭右开,取头不取尾;步长为1。

  2. range(M,N):产生[M,N)的数字序列。左闭右开,取头不取尾;步长为1。

  3. range(M,N,step):产生[M,N)的数字序列。左闭右开,取头不取尾;步长为step。

  • 用法一:产生0开始步长为1的数字序列
for i in range(9):
    print(i,'Hello!')
  • 用法二:直接控制循环次数
for i in range(9):
    print('Hello!')

for i in range(-10,0):
    print(i,end="   ")

以下是几个小练习以更好的说明:

1、100以内所有偶数

for i in range(0,101,2):
    print(i,end='   ')
    if(i == 50):
        print('\n')

2、打印100-200中所有个位数是3的数

for i in range(100,200):
    if(i % 10 == 3):     #(i % 100 == 3) or (i % 100 % 10 == 3)
        print(i,end='   ')

注释后面的是刚开始写的,当时头打铁了,不知道在想什么,虽然也可以完成任务。可能是当吃饭的点了,在吃饭的路上就反应过来了。

3、100-1000水仙花数

print('100-1000的水仙花数有:')
for i in range(100,1000):
    item = i
    if(((i % 10)**3)+(((i // 10)%10)**3)+((i // 100)**3) == item):
        print(item,end="  ")

这个程序上篇文章就有,今天循环觉得还是有必要再写一次。

4、乘法口诀表

for i in range(1,10):
    for j in range(1,10):
        if(i >= j):
            print(j,'*',i,'=',i*j,end="    ")
    print('\n')

这是刚开始写的,运行效率不高。所以马上有了下面这个表:

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

这只是我个人的思路,有任何问题敬请斧正。

for循环主要运用于统计个数及求和。

while循环

语法

while(条件语句):

循环体

说明

​ while — 保留字,固定写法;

​ 条件语句 — 任何有结果的表达式(赋值表达式除外);

​ : — 固定写法;

​ 循环体 === 跟while保持一个缩进的一条或多条语句;需要重复执行的代码。

执行过程

​ 首先判断条件语句是否为True,若为True则执行循环体,执行完循环体再判断条件是否为True

​ 若为True则再执行循环体…直到条件为False退出循环。

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

​ 使用while循环打印10次Hello

count = 10
while(count > 0):
    print(count,'Hello!')
    count -= 1

while练习 — 猜数字游戏

print('**********猜数字游戏**********')
user_number = int(input('请输入您的数字以开始游戏(1-100的整数)输入0以结束游戏:'))
number = random.randint(1,100)

while(1):
    if(user_number < 0 or user_number > 100):
        print('要输入0-100的整数哦!输入0以结束游戏!')
        user_number = int(input('请输入您的数字以开始游戏(0-100的整数):'))
    elif(user_number > number):
        print('猜错啦!','提示:太大了哦!输入0以结束游戏!')
        user_number = int(input('请再次输入您的数字(1-100的整数):'))
    elif(user_number < number and user_number != 0):
        print('猜错啦!', '提示:太小了哦!输入0以结束游戏!')
        user_number = int(input('请再次输入您的数字(1-100的整数):'))
    elif(user_number == 0):
        print('游戏结束!')
        break
    else:
        print('太棒啦,猜对啦!')
        print('游戏结束!')
        break

对于while与for循环的选择:

for循环while循环
循环次数确定循环次数不确定

continue、break

​ continue、break只能在循环体中出现。

continue

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

for i in range(9):
    if(i == 5 or i == 7):
        continue
    print('----',i,'----')   
    '''
		---- 0 ----
		---- 1 ----
		---- 2 ----
		---- 3 ----
		---- 4 ----
		---- 6 ----
		---- 8 ----
    '''

以上代码使得continue作用显而易见。当执行到“i = =5”与“i= =7”时,直接跳过continue之后的所有语句(print(’----’,i,’----’))。这也就是问什么输出中没有5与7 的原因。

#### break

若在执行循环体过程中遇到了break,结束整个循环。

for i in range(9):
    if(i == 5 or i == 7):
        break
    print('----',i,'----')
    '''
    	---- 1 ----
		---- 2 ----
		---- 3 ----
		---- 4 ----
    '''

代码同上,但是此处用break替换了continue,从输出结果就可以发现,break直接跳出了整个循环所以只打印了5之前的数字。

按照之前的了解到的循环,for、while循环到这也就结束了。其实并不然:

​ 完整的for循环:

for 变量 in 序列:

循环体

else

代码段

完整的while循环:

while 条件语句:

循环体

else

循环体

else结构的存在不影响原来循环的执行;

特别的:

当循环自然结束,else内的代码段才会执行;

当循环是遇到break而结束,那么else内代码不执行。

练习题

基础题

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

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

    # for循环
    print('100~200内个位数或者十位数能被3整除的数:')
    for i in range(100,201):
        if((i % 10) % 3 == 0 or (i // 10) % 10 % 3 == 0):
            print(i,end='   ')
    
    print('\n')
    
    # while循环
    i = 100
    print('100~200内个位数或者十位数能被3整除的数:')
    while(201 >= i >= 100):
        if ((i % 10) % 3 == 0 or (i // 10) % 10 % 3 == 0):
            print(i, end='   ')
        i += 1
    
  3. 统计100~200中十位数是5的数的个数

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

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

    summary = 0
    for i in range(50,150):
        if (i % 3 == 0 and i % 5 != 0):
            summary += i
    print('50~150中所有能被3整除但是不能被5整除的数的和:'+str(summary))
    

进阶题

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

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

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

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

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

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

    print('100-1000的水仙花数有:')
    for i in range(100,1000):
        item = i
        if(((i % 10)**3)+(((i // 10)%10)**3)+((i // 100)**3) == item):
            print(item,end="  ")
    

挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
# while 循环
is_prime_number = int(input('请输入一个整数:'))
item = 2
while(item <= is_prime_number):
    if (is_prime_number % item == 0 and item != is_prime_number):
        print(is_prime_number,'不是素数!')
        break
    item += 1
else:
    print(is_prime_number,'是素数!')

# for 循环
is_prime_number = int(input('请输入一个整数:'))
for i in range(2,is_prime_number):
    if((is_prime_number % i) == 0):
        print(is_prime_number,'不是素数!')
        break
else:
    print(is_prime_number,'是素数!')
    
# for优化

is_prime_number = int(input('请输入一个整数:'))
for i in range(2,int((is_prime_number) ** 0.5) + 1):
    if(is_prime_number % i == 0):
        print(is_prime_number,'不是素数!')
        break
else:
    print(is_prime_number,'是素数!')
  1. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
    循环计算数列原理

    number_fibonacci = int(input('请输入要求斐波那契数列指定的位数:'))
    fibonacci = 1
    next = 1
    if(number_fibonacci == 1 or number_fibonacci == 2):
        print('斐波那契数列的第',number_fibonacci,'项是:',1)
    else:
        for i in range(number_fibonacci - 2):
           item = fibonacci + next
           next = fibonacci
           fibonacci = item
    print('斐波那契数列的第',number_fibonacci,'项是:',fibonacci)
    
  2. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

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

    # 大马:big_horse   中马:middle_horse   小马:little_horse
    # big_horse + middle_horse + little_horse = 100
    # goods = 100
    print('|','大马数量','中马数量','小马数量',sep='                    ')
    for big_horse in range(33):         #若全为大马
        for middle_horse in range(50):          #若全为中马
            for little_horse in range(200):     #若全为小马
                if(big_horse * 3 + middle_horse * 2 + little_horse * 0.5 == 100 and big_horse + middle_horse + little_horse == 100):#当大中小马和等于100且货物等于100时满足题设,输出此时的马儿数量
                    print('|',big_horse,'|',middle_horse,'|',little_horse,sep='                ')
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值