Python 编程1000例(5):拿鸡蛋问题和回文数问题

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

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

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

一、拿鸡蛋问题

需求:假设有一筐鸡蛋,准备取出,如果:
1 个 1 个拿,正好拿完。
2 个 2 个拿,还剩 1 个。
3 个 3 个拿,正好拿完。
4 个 4 个拿,还剩 1 个。
5 个 5 个拿,还剩 1 个。
6 个 6 个拿,还剩 3 个。
7 个 7 个拿,正好拿完。
8 个 8 个拿,还剩 1 个。
9 个 9 个拿,正好拿完。问框里最少有多少鸡蛋?案例完整代码如下:

# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:12.拿鸡蛋问题.py
@time:2021/01/20
"""
for i in range(9, 1000):  # 测试9~1000以内有没有符合条件的
    # 根据题目设置条件
    if i % 2 == 1 and i % 3 == 0 and i % 4 == 1 and i % 5 == 1 \
            and i % 6 == 3 and i % 7 == 0 and i % 8 == 1 and i % 9 == 0:
        print(i)  # 输出结果为 441

二、回文数问题

需求:假设n是一任意自然数,若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若 n=1234321,则称n为一回文数;但若 n=1234567,则n不是回文数。案例演示效果如下:
在这里插入图片描述
案例完整代码如下:

# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:10.回文数问题.py
@time:2021/01/20
"""

while True:  # 可以测试任意多个数
    num1 = num2 = int(input("请输入一个自然数: "))  # 输入数据
    t = 0  # 设置中间变量
    while num2 > 0:  # 输入数据大于0时
        # num2%10 举个例子: 1234%10==>商123 余4 123%10==>商12 余3 依次类推
        # 4 3 2 1 组合成4321 (((0*10+4)*10+3)*10+2)*10+1
        # ==> 公式(t*10+num2%10的值)
        t = t * 10 + num2 % 10  # 将数据尾数依次存入t中
        num2 //= 10  # 数据取整

    if num1 == t:  # 反向排列的数与原数相等
        print(f"{num1} 是一个回文数")  # 输出是回文数
    else:  # 反向排列的数与原数不相等
        print(f"{num1} 不是一个回文数")  # 输出不是回文数

说明:由于 input()函数录入数据的特点是无论输入任何数据,都是字符串类型,所以可以直接利用字符串的切片将其逆序,然后和录入的数据进行对比即可。此种做法源码如下:

while True:  # 可以测试任意多个数
    num1 = input("请输入一个自然数: ")  # 输入数据
    # if num1 == num1[::-1]:  # 反向排列的数与原数相等
    #     print(f"{num1} 是一个回文数")  # 输出是回文数
    # else:  # 反向排列的数与原数不相等
    #     print(f"{num1} 不是一个回文数")  # 输出不是回文数
    # 使用三元表达式改写
    result = "{} 是一个回文数".format(num1) if num1 == num1[::-1] else "{} 不是一个回文数".format(num1)
    print(result)

程序运行结果如下:
在这里插入图片描述
可以看出和上面做法的结果是一致的。

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


在这里插入图片描述

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

猜你喜欢

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