分支和循环结构实战

例子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)也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个 N\small{N} 位非负整数,其各位数字的N \small{N} 次方和刚好等于该数本身,例如: 153=13+53+33\small{153 = 1^{3} + 5^{3} + 3^{3}} ,所以 153 是一个水仙花数; 1634=14+64+34+44\small{1634 = 1^{4} + 6^{4} + 3^{4} + 4^{4}} ,所以 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时,庄家胜~

  • 当摇出了第一次的点数,玩家胜利~

  • 都不是,玩家继续,直到分出胜负~

//