python-DAY03
分支和循环结构实战
例子1:斐波那契数列
a, b = 0, 1
for _ in range(20):
a, b = b, a + b
print(a)
说明:上面循环中的
a, b = b, a + b表示将变量b的值赋给a,把a + b的值赋给b。通过这个递推公式,我们可以依次获得斐波那契数列中的数。
例子2:寻找水仙花数
要求:找出 100 到 999 范围内的所有水仙花数。
提示:在数论中,水仙花数(narcissistic number)也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个 位非负整数,其各位数字的 次方和刚好等于该数本身,例如: ,所以 153 是一个水仙花数; ,所以 1634 也是一个水仙花数。对于三位数,解题的关键是将它拆分为个位、十位、百位,再判断是否满足水仙花数的要求,这一点利用 Python 中的
//和%运算符其实很容易做到。
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)
例子3:正数的反转
eg:1234 -> 4321
num = int(input('num = ')) #num表示待翻转的数字
Rnum = 0 #Rnum代表反转后的数
while num > 0:
Rnum = Rnum * 10 + num % 10
num //= 10
print(Rnum)例子3:百钱百鸡问题
说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元三只,用 100 块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
for x in range(0, 21):
for y in range(0, 34):
for z in range(0, 100, 3):
if x + y + z == 100 and 5 * x + 3 * y + z // 3 == 100:
print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')
for x in range(0,20):
for y in range(0,33):
z=100-x-y
if 5*x+3*y+(1/3)*z==100:
print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')作业:CRAPS赌博游戏
说明:CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简化后的规则是:玩家第一次摇骰子如果摇出了 7 点或 11 点,玩家胜;玩家第一次如果摇出 2 点、3 点或 12 点,庄家胜;玩家如果摇出其他点数则游戏继续,玩家重新摇骰子,如果玩家摇出了 7 点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数玩家继续摇骰子,直到分出胜负。为了增加代码的趣味性,我们设定游戏开始时玩家有 1000 元的赌注,每局游戏开始之前,玩家先下注,如果玩家获胜就可以获得对应下注金额的奖励,如果庄家获胜,玩家就会输掉自己下注的金额。游戏结束的条件是玩家破产(输光所有的赌注)。
思路:
调用random模块,进行模拟摇骰子。
当摇出7或者11时,玩家胜~
摇出2,3,12时,庄家胜~
都不是,则继续~
当摇出7时,庄家胜~
当摇出了第一次的点数,玩家胜利~
都不是,玩家继续,直到分出胜负~
//