05 分支与循环结构的应用
经典案例
例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
例2:百钱买百鸡问题
公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
"""
example2 - 百钱买百鸡
穷举法(暴力破解法):穷尽所有可能性,然后设置条件,找到问题的解
Author: yucui
Date: 2021/7/22
"""
for x in range(0, 21):
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
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}')
|