分支和循环结构的重要性不言而喻,它是构造程序逻辑的基础。
一、程序的结构控制
单分支结构:
单分支结构是分支结构中最简单的一种方式,单分支结构只需要判断一个条件,根据这个条件是否成立来决定是否执行一段语句。
二分支结构:
二分支结构是根据条件判断的不同而选择不同执行路径的一种分支结构,二分支结构也只需要判断一个条件,根据这个条件来决定执行的语句块,成立执行if中的指令,不成立执行else中的语句。
多分支结构:
多分支结构是根据不同条件来选择语句块运行的一种分支结构,分支结构需要判断多个条件,根据判断当前条件是否成立来决定是否执行当前语句块,当所有条件都不成立时,执行else后的语句块。
二、分支和循环结构真题训练
1.寻找水仙花数。
水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身。
这个题目的关键是将一个三位数拆分为个位、十位、百位,这一点利用Python中的//(整除)和%(求模)运算符其实很容易做到:
# @Time : 2024/3/9 14:07 # @Author : 是Dream呀 # @File : 12345.py for num in range(100, 1000): low = num % 10 mid = num // 10 % 10 high = num // 100 if num == low ** 3 + mid ** 3 + high ** 3: print(num)
2.正整数的反转
上面利用//和%拆分一个数的小技巧在写代码的时候还是很常用的。我们要将一个不知道有多少位的正整数进行反转,例如将12345变成54321,也可以利用这两个运算来实现,代码如下所示。
# @Time : 2024/3/9 14:07 # @Author : 是Dream呀 # @File : 12345.py num = int(input('num = ')) reversed_num = 0 while num > 0: reversed_num = reversed_num * 10 + num % 10 num //= 10 print(reversed_num)
3.百钱百鸡问题。
百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
# @Time : 2024/3/9 14:07 # @Author : 是Dream呀 # @File : 12345.py # 假设公鸡的数量为x,x的取值范围是0到20 for x in range(0, 21): # 假设母鸡的数量为y,y的取值范围是0到33 for y in range(0, 34): z = 100 - x - y if 5 * x + 3 * y + z // 3 == 100 and z % 3 == 0: print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')
上面使用的方法叫做穷举法,也称为暴力搜索法,这种方法通过一项一项的列举备选解决方案中所有可能的候选项并检查每个候选项是否符合问题的描述,最终得到问题的解。这种方法看起来比较笨拙,但对于运算能力非常强大的计算机来说,通常都是一个可行的甚至是不错的选择,只要问题的解存在就能够找到它。
4.CRAPS赌博游戏。
CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简化后的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;玩家如果摇出其他点数则玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数玩家继续摇骰子,直到分出胜负。
Craps赌博游戏
我们设定游戏开始时玩家有1000元的赌注
游戏结束的条件是玩家破产(输光所有的赌注)
from random import randint money = 1000 while money > 0: print(f'你的总资产为: {money}元') go_on = False # 下注金额必须大于0小于等于玩家总资产 while True: debt = int(input('请下注: ')) if 0