Python-循环

Python循环

1. for循环

语法:
for 变量 in 序列:
循环体

说明:
for、in - 关键字,固定写法
变量 - 写一个变量。(可以是已经定义的,也可以是没有定义过的)
序列 - 容器型数据类型对应的数据,常见序列:字符串、列表、元组、字典、集合、迭代器、生成器、range。
: - 固定写法
循环体 - 和for保持一个缩进的一条或者多条语句;就是需要重复执行的代码。

执行过程
让变量去序列中取值,一个一个的取,去完为止,每取一个值执行一次循环体。
for循环循环的次数和序列中元素的个数有关

2.range函数

range函数:产生指定范围的数字序列

1)range(N) - 产生[0, N)的数字序列,步长是1
2)range(M, N) - 产生[M, N)的数字序列,步长是1
3)range(M, N, step) - 产生[M, N)的数字序列,步长为step指定的值

for x in range(10):
    print(x, end=' ')

运行结果:
0 1 2 3 4 5 6 7 8 9 
for x in range(4):
    print('hello!', end=' ')

运行结果:
hello! hello! hello! hello!
for x in range(10, 20):
    print(x, end=' ')

运行结果:
10 11 12 13 14 15 16 17 18 19
for x in range(-10, 10):
    print(x, end=' ')

运行结果:
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
for x in range(10, 20, 2):
    print(x, end=' ')

运行结果:
10 12 14 16 18 
for x in range(20, 0, -1):
    print(x, end=' ')

运行结果:
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 

练习1:打印100以内所有的偶数

for x in range(0, 100, 2):
    print(x, end=' ')

运行结果:
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 

练习2:打印100 ~ 200以中所有个位数是3的数

for x in range(100, 201):
    if x % 10 == 3:
        print(x, end=' ')
        
运行结果:
103 113 123 133 143 153 163 173 183 193

练习3:打印所有的水仙花数

for x in range(100, 1000):
    x_ge = x % 10
    x_shi = x % 100 // 10
    x_bai = x // 100
    if x_ge ** 3 + x_shi ** 3 + x_bai ** 3 == x:
        print(x, end=' ')
        
运行结果:
153 370 371 407

练习4:统计100以内偶数的个数

count_1 = 0
for x in range(0, 100, 2):
    count_1 += 1
print('100以内偶数的个数:', count_1)

运行结果:
100以内偶数的个数: 50

练习5:统计100以内能被3整除的偶数个数

count_2 = 0
for x in range(0, 100, 6):
    # if x % 6 == 0:
    count_2 += 1
print('100以内能被3整除的偶数个数:', count_2)

运行结果:
100以内能被3整除的偶数个数: 17

练习6:计算1+2+3+…+100的和

sum3 = 0
for x in range(1, 101):
    sum3 += x
print('1+2+3+...+100=', sum3)

运行结果:
1+2+3+...+100= 5050

练习7:计算所有水仙花的和

sum_1 = 0
for x in range(100, 1000):
    x_ge = x % 10
    x_shi = x % 100 // 10
    x_bai = x // 100
    if x_ge ** 3 + x_shi ** 3 + x_bai ** 3 == x:
        sum_1 += x
print('所有水仙花的和:', sum_1)

运行结果:
所有水仙花的和: 1301

3.while循环

1)while循环

语法:
while 条件语句:
循环体

说明:
while - 关键字;固定写法
条件语句 - 任何有结果的表达式(只有赋值语句不行)
: - 固定写法
循环体 - 和while保持一个缩进的一条或者多条语句;需要重复执行的代码

执行过程:
先判断条件句是否为True,如果为True就执行循环体,执行完循环体再判断条件是否为True,如果为True就再执行循环体…以此类推,当条件语句结果为False循环直接结束。

练习1:使用while循环打印10个 hello

x = 0
while x < 10:
    print('hello', end=' ')
    x += 1

运行结果:
hello hello hello hello hello hello hello hello hello hello

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

2)while和for的选择
for循环:循环次数确定的时候使用
while循环:循环次数不确定的时候(程序员在写代码的时候没有办法确定通过任何方式来确定循环次数)
练习2:提示用户不断输入内容,直到输入的数据是0为止

i = '1'
while i != '0':
    i = input('请输入数字:')

运行结果:
请输入数字:2
请输入数字:0

Process finished with exit code 0

4.continue和break

1)continue和break

continue和break只能出现在循环体中

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

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

for x in range(4):
    print('=====')
    continue
    print('+++++')
    print('-----')

运行结果:
=====
=====
=====
=====
for x in range(10):
    if x == 5 or x == 8:
        continue
    print(x)
    
运行结果:
0
1
2
3
4
6
7
9
for x in range(4):
    print('=====')
    break
    print('+++++')
    print('-----')
print('end')

运行结果:
=====
end
for x in range(10):
    print(x)
    if x == 3:
        break

运行结果:
0
1
2
3

2)有了break的while循环

while True:
需要重复执行的操作
if 循环结束的条件:
break

while True:
    value = input('请输入:')
    if value == '0':
        break
        
运行结果:
请输入数字:2
请输入数字:0

Process finished with exit code 0

5.else

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

完整的while循环:
while 条件语句:
循环体
else:
循环体

else结构的存在不影响原来循环的执行,当循环自然死亡else后面的代码段会执行,如果循环是因为遇到break而结束的else后面的代码不执行

for x in range(4):
    print(x, '=====')
    if x == 2:
        break
else:
    print('else')

运行结果:
0 =====
1 =====
2 =====

练习题

基础题

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

    # 使用for循环:
    for num in range(0, 100, 3):
     print(num)
    
    # 使用while循环:
     num = 0   # 保存3的倍数,默认是0
     while True:
     	# 打印3的倍数
     	print(num)
     	num += 3
     	if num >= 100:
         	break
    
  2. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数。

    # 使用for循环:
     for num in range(100, 200):
     	if num % 10 % 3 == 0 or num // 10 % 10 % 3 == 0:
         	print(num)
    
    # 使用while循环:
     num = 100
     while True:
         if num % 10 % 3 == 0 or num // 10 % 10 % 3 == 0:
             print(num)
         num += 1
         if num >= 200:
             break
    
  3. 统计100~200中十位数是5的数的个数

    for num in range(51, 150, 3):
     if num % 5 == 0:
         continue
     print(num)
    
  4. 打印50~150中所有能被3整除但是不能被5整除的数

    print('50~150中所有能被3整除但是不能被5整除的数:')
    for x in range(50, 151):
        if x % 3 == 0 and x % 5 != 0:
            print(x, end=' ')
    
    运行结果:
    50~150中所有能被3整除但是不能被5整除的数:
    51 54 57 63 66 69 72 78 81 84 87 93 96 99 102 108 111 114 117 123 126 129 132 138 141 144 147
    
  5. 计算50~150中所有能被3整除但是不能被5整除的数的和

    sum1 = 0
     for num in range(51, 150, 3):
    		if num % 5 != 0:
         	sum1 += num
     print(sum1)
    

进阶题

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

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

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

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

     num = int(input('请输入一个正整数:'))
     count = 0
     while True:
    	 	num //= 10
     	count += 1
     	if num == 0:
     		break
    

print(count)



9. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是 

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

```python
for x in range(100, 1000):
    x_ge = x % 10
    x_shi = x % 100 // 10
    x_bai = x // 100
    if x_ge ** 3 + x_shi ** 3 + x_bai ** 3 == x:
        print(x, end=' ')
        

挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
for x in range(2, int(num ** 0.5) + 1):
 if num % x == 0:
     print(num, '不是素数')
     break
else:
 print(num, '是素数')
  1. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
pre_1 = pre_2 = 1
n = 6
if n == 1 or n == 2:
 print(1)
else:
 for x in range(n-3):
     pre_1, pre_2 = pre_2, pre_1 + pre_2
 print(pre_1 + pre_2)
  1. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1, 10):
    for j in range(1, i+1):
        print(j, '*', i, '=', i * j, end='   ')
    else:
        print('')
  1. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for x in range(0,101):
    for y in range(0,101):
        for z in range(0, 101):
            if x +y+ z == 100 and 3*x + 2*y + (1/2)*z == 100:
                print(x, y, z)
                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值