每天学点python-构造程序逻辑

  • 我们的程序无论简单复杂,都是由顺序结构、分支结构、循环结构构成的。

练习清单

  • 寻找“水仙花数”。
  • 寻找“完美数”。
  • “百钱百鸡”问题。
  • 生成“斐波拉切数列”。
  • Craps赌博游戏。

练习1、寻找“水仙花数”。

  • 水仙花数是各位立方和等于这个数本身的数
    # -*- coding: utf-8 -*-
    """
    找出100~999之间的所有水仙花数
    水仙花数是各位立方和等于这个数本身的数
    如: 153 = 1**3 + 5**3 + 3**3
    
    Created on Mon Jul 29 13:15:00 2019
    
    @author: fengzi
    """
    
    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、寻找“完美数”。

  • 完美数是除自身外其他所有因子的和正好等于这个数本身的数
    例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
    # -*- coding: utf-8 -*-
    """
    找出1~9999之间的所有完美数
    完美数是除自身外其他所有因子的和正好等于这个数本身的数
    例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
    
    Created on Mon Jul 29 13:24:51 2019
    
    @author: fengzi
    """
    
    import time
    import math
    
    for num in range(1,10000):
        sum = 0
        for factor in range(1,int(math.sqrt(num)) + 1):
            if num % factor == 0:
                sum += factor
                if factor > 1 and num / factor != factor:
                    sum += num / factor
        if sum == num:
            print(num)

在这里插入图片描述

练习3、“百钱百鸡”问题。

  • 求解《百钱百鸡》问题
    1只公鸡5元 1只母鸡3元 3只小鸡1元 用100元买100只鸡
    问公鸡 母鸡 小鸡各有多少只
    # -*- coding: utf-8 -*-
    """
    求解《百钱百鸡》问题
    1只公鸡5元 1只母鸡3元 3只小鸡1元 用100元买100只鸡
    问公鸡 母鸡 小鸡各有多少只
    
    Created on Mon Jul 29 13:32:32 2019
    
    @author: fengzi
    """
    
    for x in range(0,20):
        for y in range(0,23):
            z = 100 - x - y
            if 5 * x + 3 * y + z /3 == 100:
                print("公鸡:%d只,母鸡:%d只,小鸡:%d只" % (x, y, z))

在这里插入图片描述

  • 如果不考虑三种鸡都有的情况可以用下面这种方法:
    for x in range(0,20):
        for y in range(0,33):
            z = 100 - x - y
            if 5 * x + 3 * y + z /3 == 100:
                print("公鸡:%d只,母鸡:%d只,小鸡:%d只" % (x, y, z))

在这里插入图片描述

练习4、生成“斐波拉切数列”。

  • 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…
  • 这个数列从第3项开始,每一项都等于前两项之和。
  • 斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
    # -*- coding: utf-8 -*-
    """
    输出斐波那契数列的前20个数
    1 1 2 3 5 8 13 21 ...
    
    
    Created on Mon Jul 29 13:44:42 2019
    
    @author: fengzi
    """
    
    a = 0
    b = 1
    for _ in range(20):
        a, b = b, a + b
        print(a, end = " ")

在这里插入图片描述

练习4、Craps赌博游戏。

  • Craps赌博游戏
    玩家摇两颗色子 如果第一次摇出7点或11点 玩家胜
    如果摇出2点 3点 12点 庄家胜 其他情况游戏继续
    玩家再次摇色子 如果摇出7点 庄家胜
    如果摇出第一次摇的点数 玩家胜
    否则游戏继续 玩家继续摇色子
    玩家进入游戏时有1000元的赌注 全部输光游戏结束
      # -*- coding: utf-8 -*-
        """
        Craps赌博游戏
        玩家摇两颗色子 如果第一次摇出7点或11点 玩家胜
        如果摇出2点 3点 12点 庄家胜 其他情况游戏继续
        玩家再次摇色子 如果摇出7点 庄家胜
        如果摇出第一次摇的点数 玩家胜
        否则游戏继续 玩家继续摇色子
        玩家进入游戏时有1000元的赌注 全部输光游戏结束
        
        Created on Mon Jul 29 14:17:03 2019
        
        @author: fengzi
        """
        
        from random import randint
        
        money = 1000
        while money > 0:
            print("你的总资产为:",money)
            needs_go_on = False
            while True:
                debt = int(input("请下注:"))
                if debt > 0 and debt <= money:
                    break
            first = randint(1, 6) + randint(1, 6)
            print("玩家摇出了%d点" % first)
            if first == 7 or first == 11:
                print("玩家胜利!")
                money += debt
            elif first == 2 or first == 3 or first == 12:
                print("庄家胜利!")
                money -= debt
            else:
                needs_go_on = True
                
            while needs_go_on:
                current = randint(1, 6) + randint(1, 6)
                print("玩家摇出了%d点" % current)
                if current == 7:
                    print("庄家胜利!")
                    money -= debt
                    needs_go_on = False
                elif current == first:
                    print("玩家胜利!")
                    money += debt
                    needs_go_on = False
                    
        print("你破产了,游戏结束!")

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值