page contents

python基础编程100例:第23期-完数

本文讲述了python基础编程100例:第23期-完数!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-03-8mqiZKaJ622ff49e87754.png

本文讲述了python基础编程100例:第23期-完数!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

第23期-完数

1 问题描述

求某一范围内的所有完数。

或者输入一个数,判断其是不是完数。

如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完数”。


2 解题思路

根据完数的定义,解决本题的关键是计算出所选取的整数i(i的取值范围不固定)的因子(因子就是所有可以整除这个数的数),将各因子累加到变量s (记录所有因子之和),若s等于i,则可确认i为完数,反之则不是完数。


判断是否是完数

第一步: 输入一个数,input函数

第二步: 从1开始遍历到输入的数(不包括数本身),判断是否是其因数,for循环

第三步: 累加法,判断是否相等


输出某一范围内的所有完数

第一步: 定义范围并遍历范围内的所有数,for或while循环

第二步: 从1开始遍历到数(不包括数本身),判断是否是其因数,for循环

第三步: 累加法,判断是否相等


3 解题方法

判断完数

pnum = int(input('请输入一个数:'))

cum = 0

for i in range(1, pnum):

    if pnum % i == 0:

        cum += i

if pnum == cum:

    print(f'{pnum}是完数')

else:

    print(f'{pnum}不是完数')

第1行: input函数输入一个值并用int函数将其转换为整数类型,返回值到pnum变量

第2行: 定义变量cum,初始值为0,用于累计因子的和

第3行: 使用for循环遍历小于pnum的所有整数

第4-5行: 分别判断小于pnum的值是否为其因子,若是,则加到cum上

第6-9行: 判断因子和是否与原数相等,若是,用print函数打印其是完数,若不是,用print函数打印其不是完数


代码运行结果为:

attachments-2022-03-KZdTyoCc622ff4cc5c3a2.png


#输出完数

pnum = []

for i in range(1, 1001):

    cum = 0

    for j in range(1, i):

        if i % j == 0:

            cum += j

    if i == cum:

        pnum.append(str(i))

print('1000以内的完数有这些:', ','.join(pnum))

第1行: 定义所有完数的集合列表pnum

第2行: 用for循环遍历1-1000的所有值,以输出这范围内的所有完数

第3行: 定义变量cum,初始值为0,用于累计因子的和

第4行: 使用for循环遍历小于i的所有整数

第5-6行: 分别判断小于i的值是否为其因子,若是,则加到cum上

第7-8行: 判断因子和是否与i相等,若是,则将i的值加到列表pnum的末尾

第9行: 输出1000以内的所有完数并用英文的逗号隔开


代码运行结果为:

attachments-2022-03-7V6dE4sX622ff4d7c2b9f.png


这里用到了join函数,简单讲解下这个函数:

string.join()函数

Python中有join()和os.path.join()两个函数,具体作用如下:

join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

os.path.join(): 将多个路径组合后返回

语法:

'sep'.join(seq)

参数说明:

sep:分隔符。可以为空

seq:要连接的元素序列、字符串、元组、字典


例如:代码:

seq4 = ('hello','good','yes','doiido')

print ':'.join(seq4)

输出:hello:good:yes:doiido


小思考

不知道各位小伙伴们有没有发现,上下两种方法cum = 0的位置不一样,上面cum = 0的位置在for循环之外,而下面cum = 0的位置在两个循环之间,这又是什么原因呢?

这是因为上面的判断完数中,cum的值一次代码运行只需要确定一次,而下面的输出所有完数中,对于所有小于1000的数,都需要使用到cum,所以每次循环,都需要将cum的值重新赋值为0。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-lLyfIgqb62919aa9b7f1d.jpeg

  • 发表于 2022-03-15 10:07
  • 阅读 ( 515 )
  • 分类:Python开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. Pack 1131 文章
  3. 小柒 1046 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章