Python 编程1000例(7):水仙花数和兔生崽案例

本系列文章通过 1000(一篇文章表示 1 个实例) 个实例 ,为读者提供较为详细的练习题目,以便读者举一反三,深度学习。本系列的文章涉及到 Python 知识点包括:Python 语言基础、运算符和表达式、语句和程序结构、列表和元组、字典和集合、字符串、正则表达式、函数、面向对象编程、模块和包、异常处理和程序调试、文件和目录操作、数据库编程、界面编程、网络编程、WEB 编程、进程和线程、网络爬虫、游戏编程等知识点,由易到难,由浅入深,一步步打下坚实的编程基础。

本系列文章涉及的算法包括搜索、回溯、递归、排序、迭代、贪心、分治和动态规划等,涉及的数据结构包括字符串、列表、指针、区间、队列、矩阵、堆栈、链表、哈希表、线段树、二叉树、二叉搜索树和图结构等。

本系列文章是笔者为适应当前教育改革的创新要求,更好地践行语言类课程,满足实践教学与创新能力培养的需要,阅读大量书籍、各大互联网公司的面试算法、LintCode、LeetCode、九章算法和结合笔者近几年项目经验编写的系列文章,精选了 1000 个趣味性、实用性强的应用实例,从不同难度、不同算法、不同类型和不同数据结构等方面,将实际算法进行总结,希望为 Python 编程人员抛砖引玉。由于笔者经验与水平有限,博文中疏漏及不妥之处在所难免,衷心地希望各位读者在评论区多提宝贵意见及具体的修改建议,以便笔者进一步修改和完善。

一、水仙花数

需求:打印出 1000 以内的所有“水仙花数”,“水仙花数” 是指一个三位数,其各位数字立方和等于该数本身。例如, 153 是一个“水仙花数”,因为 153=13+53+3**3。思路分析如下:

  1. 三位数说明是从100开始进行判断,1000以内则表示不超出1000,说明我们要从100~999逐个进行判断,则需要使用循环语句,循环语句又分为两种 for 和 while,for 循环更加简洁。
  2. 有了数字之后我们需要先获取数字各个位置上的数,然后分别对这些数进行立方,最后求和,则需要使用算术运算符进行计算。
  3. 将求和后的数据与原数据进行比较,相等则为水仙花数,否则不是,要判断,我们就需要使用条件判断语句。

使用 while 语句,示例代码如下:

# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:16.水仙花数.py
@time:2021/01/21
"""
i = 100  # 初始值
while i < 1000:  # 循环100~1000以内的数
    """
    求任意自然数各个位置上的数字,例如12345:
    5 ==> 12345 % 10
    4 ==> 1234 % 10 ==> (12345 // 10) % 10 十位就整除10 然后对10取余
    3 ==> 123 % 10 ==> (12345 // 10 // 10) % 10  百位就整除100 然后对10取余
    2 ==> 123 % 10 ==> (12345 // 10 // 10 // 10) % 10 千位就整除1000 然后对10取余
    ....
    以此类推...
    注意:最高位就不用在对10取余数了
    """
    ge_wei = i % 10  # 取个位数
    shi_wei = i // 10 % 10  # 取十位数
    bai_wei = i // 100  # 取百位数
    # 使用小括号进行分组优化,则逻辑的顺序就非常清晰,一种良好的设计习惯
    if (ge_wei ** 3 + shi_wei ** 3 + bai_wei ** 3) == i:  # 判断是否满足水仙花数的条件
        print(f"{i} 是水仙花数")
    i += 1

程序运行结果如下:
在这里插入图片描述
使用 for 语句,示例代码如下:

for i in range(100, 1000):
    ge_wei = i % 10  # 取个位数
    shi_wei = i // 10 % 10  # 取十位数
    bai_wei = i // 100  # 取百位数
    # 使用小括号进行分组优化,则逻辑的顺序就非常清晰,一种良好的设计习惯
    if (ge_wei ** 3 + shi_wei ** 3 + bai_wei ** 3) == i:  # 判断是否满足水仙花数的条件
        print(f"{i} 是水仙花数")

二、兔生崽

需求:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死,请输出前20个月中每个月有多少对兔子。

设计思路:兔子每个月的规律数是1、1、2、3、5、8、13、21、34…,该数列是一个斐波那契数列,即第3个数是前两个数的和。案例完整代码如下:

# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:17.兔生崽.py
@time:2021/01/21
"""

first = second = 1  # 定义前两个月的个数
for month in range(1, 21):  # 前20个月
    if month > 2:
        third = first + second  # 当月的兔子数
        first = second  # 前2个月兔子数改为前1个月兔子数
        second = third  # 前1个月兔子数改为当月兔子数
        print(f"第{month}个月有{third}对兔子")  # 打印当月兔子数
    else:
        print(f"第{month}个月有{first}对兔子")  # 打印兔子数

程序运行结果如下:

感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!


在这里插入图片描述

    好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞评论收藏 一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
 编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了 关注 我哦!

猜你喜欢

转载自blog.csdn.net/xw1680/article/details/112973634