上QQ阅读APP看书,第一时间看更新
3.2.1 算法与实现——筛选自除数
通过解决阿姆斯特朗数问题,我们已经基本可以掌握这类问题的编程解决思路,本质上都是先将数值中的每一位数字提取出来,之后根据对应数的性质来进行判断,确定这个数是否符合这些性质。通过自除数的定义,解决这个问题的算法如下:
(1)首先将这个数的每一个数字提取出来。
(2)检查数字中是否存在0,如果存在,则判定不是自除数。
(3)使用原数对每一位数字进行除法运算,判定是否存在余数非零结果。
根据上面的分析,我们可以很轻松地编写出如下代码:
写出上面的代码很轻松,并且其可以非常正确地工作,和最开始相比,已经有了不小的进步,比如对于拆解数值每一位上的数字,我们直接将数值转换成字符串,再转换成列表即可,非常简洁。上面的代码非常完美了吗?这当然是不可能的。上面的自除数的核心代码有14行,其中判断自除数性质的代码占了9行,是程序的核心,大家可以思考一下这部分的逻辑是否可以简化,代码上的简化我们可以借助Python中的另一个强大的语法结构实现:[for-in-if],下一小节再具体介绍。