6 循环

25 阅读4分钟

一、for 循环

1.1 语法

for i in range(10):
	print(i)

1.2 示例

打印0到100之间的偶数

#打印100以内偶数
for i in range(100):
	if i%2 == 0:
		print("偶数",i)

二、嵌套for循环

建议嵌套尽量不超过4层。

#循环打印楼层
for floor in range(1,7):
    print(f"当前在{floor}层".center(50,'-'))
    for room in range(1,10):
        print(f"当前房间是{floor}0{room}室.")

三、break&continue

#跳过第三层循环打印楼层
for floor in range(1,7):
    print(f"当前在{floor}层".center(50,'-'))
    if floor == 3:
        print("不走三层……")
        continue    #停止本次循环,进入下次循环
    for room in range(1,10):
        print(f"当前房间是{floor}0{room}室.")


#循环打印楼层至404结束
for floor in range(1,7):
    print(f"当前在{floor}层".center(50,'-'))
    if floor == 3:
        print("不走三层……")
        continue    #停止本次循环,进入下次循环
    for room in range(1,10):
        if floor == 4 and room == 4:
            print("见鬼了……")
            #break   #跳出本层循环,上一层循环仍继续
            exit()    #结束程序
        else:
            print(f"当前房间是{floor}0{room}室.")

四、for循环练习

4.1 打印九九乘法表

# 打印九九乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print(f"{i}x{j}={i*j}",end =" ")
    print()

4.2 素数练习

# 方式一:求100以内所有素数
for i in range(2,101):
    is_ss = True
    for j in range(2,i):
        if i % j == 0:
            is_ss = False

    if is_ss == True:
        print(f"{i}是素数……")

# 方式二:求100以内所有素数
for i in range(2,101):
    for j in range(2,i):
        if i % j == 0:
            break
    else:  #当循环正常结束时执行
        print(f"{i}是素数……")

4.3 打印三角形

# 打印三角形
for i in range(10):
    if i <= 5:
        print("* " * i)
    else:
        print("* " * (10-i))

五、while 循环

5.1 语法

count = 0
while count < 10:
	count += 1
	print("loop",count)

5.2 死循环

count = 0
while True:
	count += 1
	print("loop",count)

5.3 示例

要求:每轮可以猜3次,猜错了有提示猜大了还是小了,3次没猜中可选继续猜还是结局。

# 猜小几居年龄
count = 0
black_girl_age = 25
while count < 3:
    guess = input("猜小几居的年龄>:")
    if guess.isdigit():
        guess = int(guess)
    else:
        print("不识别的指令,请重新输入>:")
        continue
    if guess > black_girl_age:
        print("大了大了……")
    elif guess < black_girl_age:
        print("小了小了……")
    else:
        print("恭喜你!猜对了!^-^")
        break
    count += 1
    if count == 3:
        cmd = input("还要再试一把吗?(y/n)>:")
        if cmd in ["Y","y","yes"]:
            count = 0
        else:
            print("byby……see u……")

六、实战小程序

6.1 存款多少年才能翻倍

1万本金,利息0.01932每年,问连本带利多少年能翻倍?

base = 10000   #本金
inserest = 0.01932       #利息
year = 0

while base <= 20000:
    year += 1
    base = base + (base * inserest)
    print(year,base)

6.2 小球坠落反弹经过多少米

一个小球,从100米高空坠落,每次反弹回原来一半高度,问10次反弹完,小球经过多少米?

height = 100   #小球初始高度
distance = 0   #小球初始经过
count = 0      #小球初始坠落次数

while count < 10:
    distance += height #记录坠落时经过的长度
    height = height / 2 #记录反弹回的高度
    distance += height #记录反弹回经过的长度
    count += 1
    print(count,distance,height)

6.3 猴子吃桃

有一堆桃子,猴子每天吃桃子总数的一半并多吃一个。吃了10天,到11天还剩1个桃子,问:猴子吃之前一共多少个桃子?

count = 1
day = 11

while day > 1:
    count = (count + 1)*2   #上一天吃之前的桃子数量
    day -= 1
    print(day,count)

6.4 计算和

计算1-2+3-4+5-6+7……100的和

# 方式一
sum_o = 0
i = 1
while i <= 100:
    if i % 2 == 0:
        sum_o = sum_o + i
    i += 1

sum_j = 0
i = 1
while i <= 100:
    if i % 2 != 0:
        sum_j = sum_j + i
    i += 1

print(sum_j - sum_o)

# 方式二
sum = 0
count = 1
while count <= 100:
    if count % 2 == 0:
        sum -= count
    else:
        sum += count
    count += 1
print(sum)

6.5 寻找列表中最大值、最小值

寻找列表中最大值、最小值

# 寻找列表中最大值、最小值
data = [23,14,54,3,57,12,9,4,32,6]
max_n = data[0]
for i in data:
    if i > max_n:
        max_n = i
print(max_n)

min_n = data[0]
for i in data:
    if i < min_n:
        min_n = i
print(min_n)

6.6 寻找组合

从两个列表中各取一个数,如果两个数的和等于10,则以列表方式输出这两个数

data1 = [2,14,-5,11,76,-35,22,74,-31,45]
data2 = [15,-34,63,54,67,-1,7,8,6,-9,-23,43,41]

for i in data1:
    for j in data2:
        if i + j == 10:
            print([i,j])

6.7 年会抽奖

300员工,年会随机抽奖,一等奖3人,2等奖6人,三等奖30人,中奖者不能重复

import random
staff_list = []
for i in range(1,301):
    staff_list.append(f'员工{i}')

lottery_levels = [30,6,3]
count = 0
while count < 3:
    choice = input(f'开始抽 {3-count} 等奖 ……')
    winners = random.sample(staff_list,lottery_levels[count])
    print(winners)
    for p in winners:
        staff_list.remove(p) # 删除中奖者
    count += 1