循环结构

循环 - 让代码重复执行

1. for循环

1.1语法:

for 变量 in 序列:

#### 循环体

1.2说明:

1)for in - 都是关键字,固定写法

2)变量 - 自定义一个变量名

3)序列 - 容器型数据类型对应的数据

4)常见的序列:字符串,元组,列表,字典,迭代器,生成器,集合

5)循环体:重复执行的代码段

6)执行过程:变量依次从序列中取值,取一次循环体执行一次,直到取完

1
2
for i in "I Love You":
print(i)

1.3 range 函数 - 产生指定的数字序列

1)range(N) 产生[0-N)的数字序列,步长默认为1

2)range(M,N) 产生[M,N)的数字序列,步长默认为1

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i in range(10):
print(i)
ptrint("---------------------")
a = 0
for i in range(0,100):
a+=1
print("hello")
print(a)
ptrint("---------------------")
for i in range(10,20,2):
print(i)
ptrint("---------------------")
for i in range(20,2,-3):
print(i)

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

1
2
for i in range(0,100,2):
print(i)

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

1
2
3
for i in range(100,200):
if i % 10 == 3:
print(i)

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

1
2
3
for i in range(100,1000):
if (i//100)**3+(i//10%10)**3+(i%10)**3 == i:
print("水仙花数:",i)

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

1
2
3
4
5
count = 0
for i in range(100):
if i % 2 == 0:
count+=1
print(count)

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

1
2
3
4
5
count = 0
for i in range(100):
if i % 6 == 0:
count+=1
print(count)

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

1
2
3
4
sum = 0
for i in range(101):
sum += i
print(sum)

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

1
2
3
4
5
sum = 0
for i in range(100,1000):
if (i//100)**3+(i//10%10)**3+(i%10)**3 == i:
sum += i
print(sum)

2.while 循环

2.1语法:

while 条件语句:

循环体

2.2说明:

2.2.1while - 关键字,固定写法

2.2.2条件语句 - 任何有结果的表达式

2.2.3循环体 - 重复执行的代码段

2.3规则:

2.3.1先判断条件,true执行循环体,执行完再次判断,

2.3.2如果为true再次执行,以此类推,直到条件不成立,循环结束

练习:使用while打印十个hello

1
2
3
4
num = 0
while num<10:
print("hello")
num += 1

2.4while 和 for的选择

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

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

练习:提示用户不断输入内容,直到输入的数据是0停止

1
2
3
b = input("请输入:")
while b !='0':
b = input("请输入:")

3.循环关键字

3.1 continue 和 break

3.1.1 说明:只能出现在循环体中,for循环与while循环都可

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

如果遇到continue,当次循环结束,直接执行下一次循环

实例1

1
2
3
4
for i in range(4):
print('======')
continue
print('++++++')

实例2

1
2
3
4
5
for i in range(10):
if i == 5 or i == 8:
continue
print(i)

3.1.3 break - 结束整个循环

如果遇到break,整个循环结束

实例1

1
2
3
for i in range(10):
print(i)
break

实例2

1
2
3
4
for i in range(10):
if i == 5:
break
print(i)

实例3

1
2
3
4
while True:
value = input("请输入:")
if value == '0':
break

3.2 else关键字

说明:

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

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

代码段

重点:else结构的存在不影响原来循环的执行

当循环正常结束时,继续执行else后面的代码段,否则不执行

实例1

1
2
3
4
for i in range(4):
print(i,"====")
else:
print("正常")

实例2

1
2
3
4
5
6
for i in range(4):
print(i,"====")
if i == 2:
break
else:
print("正常")

通过实例1和实例2的对比看else的作用,while相同

基础题

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

    for循环

    1
    2
    for i in range(0,100,3):
    print(i)

    while循环

    1
    2
    3
    4
    5
    x = 0
    while x<100:
    if x % 3 ==0:
    print(x)
    x+=1
  2. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数。

    for循环

    1
    2
    3
    for i in range(100,200):
    if (i%10) % 3 ==0 or (i//10%10) % 3 ==0:
    print(i)

    while循环

    1
    2
    3
    4
    5
    x = 100
    while x<200:
    if (x % 10) % 3 == 0 or (x // 10 % 10) % 3 == 0:
    print(x)
    x+=1
  3. 统计100~200中十位数是5的数的个数

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

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

    1
    2
    3
    4
    5
    sum = 0
    for i in range(50,150):
    if i % 3 ==0 and i % 5 !=0:
    sum+=i
    print(sum)

进阶题

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

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

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

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

    1
    2
    3
    4
    5
    6
    b = int(input("请输入一个正整数:"))
    count = 0
    while b>0:
    b //=10
    count+=1
    print("它是一个",count,"位数")
  4. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。

    1
    2
    3
    for i in range(100,1000):
    if (i//100)**3+(i//10%10)**3+(i%10)**3 == i:
    print("水仙花数:",i)

挑战题

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    n = int(input('请输入一个正整数:'))
    n1 = 0
    n2 = 1
    sum = 1
    for i in range(2, n+1):
    sum = n1 + n2
    n1 = n2
    n2 = sum
    print('第',n,'个数是',sum)
  3. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

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

1
2
3
4
5
for i in range(100):
for j in range(100-i):
for k in range(100-i-j):
if 3*i+2*j+k == 100:
print("有大,中,小马各",i,j,k,"匹")