分支与循环结构的应用
经典案例
例1:斐波那契数列
说明:斐波那契数列的特点是数列的前两个数都是1,从第三个数开始,每个数都是它前面两个数的和。那么斐波那契数列的前十个数为:1 1 2 3 5 8 13 21 34 55
“””
example1 – 输入一个整数n,输出n个斐波那契数
1 1 2 3 5 8 13
Author: yucui
Date: 2021/7/22
“””
n = int(input(‘请输入一个整数:’))
a, b = 1, 1
print(a, b, end=’ ‘)
while n – 2:
    c = a + b
    print(c, end=’ ‘)
    b = a
    a = c
    n = n – 1
输入n = 20
运行结果:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
1
例2:百钱买百鸡问题
公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
“””
example2 – 百钱买百鸡
穷举法(暴力破解法):穷尽所有可能性,然后设置条件,找到问题的解
Author: yucui
Date: 2021/7/22
“””
# 公鸡取值范围是0到20
for x in range(0, 21):
    # 母鸡取值范围是0到33
    for y in range(0, 34):
        z = 100 – x – y
        if z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100:
            print(f’公鸡{x}只, 母鸡{y}只, 小鸡{z}只’)
例3:分鱼问题
五个人晚上去捕鱼,捕了不计其数的鱼,然后累了去睡觉。
第二天,A*个醒来,把鱼分成了五分,扔掉了多余的1条,然后拿走了自己的一份,
B第二个醒过来,以为鱼没分过,把剩下的鱼分成了5份,扔掉多余的1条,拿走自己的一份,
C、D、E依次醒来,按照同样方法分鱼。
问他们*少捕了多少鱼?
“””
example3 – 穷举法求解分鱼问题
Author: yucui
Date: 2021/7/22
“””
num = 6
while num:
    is_enough = True
    # 检查目前的鱼够不够5个人分
    total = num
    for _ in range(5):
        if (total – 1) % 5 == 0:
            total = (total – 1) // 5 * 4
        else:
            is_enough = False
            break
    if is_enough:
        print(num)
        break
    num += 5
思路:假定一共钓了6条鱼,5次循环,如果每次都能保证够5个人分,则打印该数字,否则将鱼的数量加5,直至能满足5次循环都能满足够5个人分,此时的鱼的数量是*少满足情况的数量。
例4:猜数字游戏
随机生成一个1-100的数,输入自己猜的数,
计算机给出提示:‘猜大了’、‘猜小了’、‘恭喜您猜对了’,并显示猜对用的次数,
如果猜的次数超出7,提示”智商余额明显不足“。
“””
example4 – 猜数字游戏
Author: yucui
Date: 2021/7/22
“””
from random import randrange
count = 0
num = randrange(1, 101)
while True:
    count += 1
    guess = int(input(‘请输入您猜的数字:’))
    if guess == num:
        print(f’恭喜您猜对了,您一共猜了{count}次’)
        break
    elif guess < num:
        print(‘猜小了’)
    else:
        print(‘猜大了’)
if count > 7:
    print(‘智商余额明显不足’)
例5:*大值、*小值、平均值问题
输入10个范围在1-99的正整数,输出*大值、*小值、平均值
“””
example5 – 输入10个正整数1-99,找*大值、*小值、平均值
Author: yucui
Date: 2021/7/22
“””
max_num = 0
min_num = 100
total = 0
count = 0
while count < 10:
    num = int(input(‘请输入:’))
    if num < 1 or num > 99:
        print(‘无效输入’)
        continue
    count += 1
    if max_num < num:
        max_num = num
    if min_num >= num:
        min_num = num
    total += num
average = total / 10
print(f’*大值{max_num},*小值{min_num},平均值{average:.2f}’)