Python多法巧求“自幂数”

来源 :电脑报 | 被引量 : 0次 | 上传用户:yueyinxiangzhu
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  在编程语言的教材中常出现一道求解“水仙花数”的经典问题,即某个三位整数每个数位上数字的三次幂之和等于它本身,比如“153 = 1^3 + 5^3 + 3^3”。其实,水仙花数只是“自幂数”的一种,类似的还有四位数的“四叶玫瑰数”(各数位四次方之和等于本身的数)、五位数的“五角星数”、六位数的“六合数”等。Python语法灵活,可以使用多种方法来完成自幂数的求解,在此略举几种水仙花数的编程方法:

1.“整除”和“求余”数位分解法


  在Python中,运算符“//”代表“整除”运算,即求“整商”;而运算符“%”则是进行“求余”,利用这两种运算符可以将一个多位数的各位数字“分解”提取。在判断一个三位数是否为水仙花数时,首先构建循环结构“for i in range(100,1000):”,百位上的数字提取方法是通过“bai_wei = i//100”求“整商”来完成,比如计算“365//100”,结果就是“3”;十位上的数字提取方法是“shi_wei = (i%100)//10”,即先以100为除数进行“求余”,再将这个中间结果除以10求“整商”,比如计算“(365%100)//10”,会先得到余数65,然后计算“65//10”得到6;个位上的数字提取方法是“ge_wei  = i%10”,即除以10求余数,比如“365%10”的结果是5。
  循环中的if判断条件是“bai_wei**3 + shi_wei**3 + ge_wei**3 == i:”,即各数位上的数字的三次方之和与该数相等。最后,通过print打印输出变量i的数值,结果得到四个水仙花数:153、370、371和407(如图1)。


2.三层循环嵌套法


  因为水仙花数是对一个三位数进行判断,所以直接构建三层循环嵌套来实现从100到999的顺序递增。最外层的“for bai_wei in range(1,10):”控制百位数字循环,注意要从1开始(range()中的起始值和终止值参数为“左闭右开”区间);中间层的十位数字循环是“for shi_wei in range(0,10):”;内部的个位数字循环是“for ge_wei in range(0,10):”,变量my_data是计算存储每个三位数的数值大小,即“bai_wei*100+shi_wei*10+ge_wei”;判断条件与之前相同,最后也是打印输出结果,同样会得到四个水仙花数:153、370、371和407(如图2)。


3.map()函数映射法


  如果充分利用Python中的各种内置函数,比如map()映射函数,可以非常巧妙地快速“提取”出每个多位数上各数位的数字。首先,同样是通过“for i in range(100,1000):”构建出循环结构;然后使用“序列解包”的方式,同时为三个变量赋值——“bai_wei,shi_wei,ge_wei = map(int,str(i))”,借助map()函数将每个三位数先通过“str(i)”转换为字符串,再将int()函数映射至刚刚生成的字符串序列(迭代对象),就“还原”得到了三个整型数字,分别赋值给三个对应的变量。
  接下来仍是使用相同的判断语句和print()输出语句,同样会得到四个水仙花数:153、370、371和407(如图3)。


4.总结


  前两种方法的代码量相似,数位分解法的难点在于使用整除和求余进行组合运算,使用一层循环结构,得到各数位上的数字;循环嵌套法需要构建与数位个数相同的循环数,必须要特别注意循环递进中的代码格式缩进。map()函数映射法比较巧妙,借助str()和int()进行字符串与整型转换,代码量非常精简。
  如果题目不是求解水仙花,而是位数更多的自幂数,比如“五角星数”,前两种方法就分别需要多构建两个“整除求余”和两层循環,代码量和复杂度都会增加不少;而map()函数映射法只需要简单地增加“wan_wei”和“qian_wei”两个变量即可,然后修改for循环中的range()起始值(10000,100000)和if条件中的各位数的幂指数(由3改为5),代码量增加得也非常少(仍为4行),最终运行得到三个五角星数:54748、92727和93084(如图4)。



  如果再复杂些,比如求解八位的“八仙数”、九位的“重阳数”,大家不妨对比测试一下不同方法的编程效率。
其他文献
摘 要妊娠合并糖尿病对母婴均会产生较大影响,有时还会严重危害母亲的身体健康以及婴儿正常的生长发育。选择2008年1月至2009年6月,在我院产科门诊产前检查中,确诊的16例妊娠糖尿病孕妇进行观察及护理。通过对她们进行健康教育,心理护理,配合饮食控制、临床治疗,取得满意的效果。  关键词妊娠;糖尿病;护理     妊娠合并糖尿病是指在原有糖尿病基础上合并妊娠者;或妊娠前为隐性糖尿病,妊娠后发展为临床
期刊
什么是双重排序呢?排序的方法有很多种:冒泡、选择……排序的次序也有顺序和逆序。通过下面的例子我们一起来了解双重排序吧。  考完试后,老师将全班同学的姓名和分数录入了Excel表,接下来对所有成绩进行升序或降序排列。当选中分数一列进行排序时Excel会弹出一个提示窗口,提示选定区域旁边还有数据,是否需要“扩展选定区域”。如果不选中旁边序列的话等同于只是将分数排序了,姓名没有参加排序(姓名和原分数将会
期刊
摘 要目的:探讨白内障术后角膜水肿护理。方法:对90例(105眼)老年性白内障术后角膜裂隙灯观察,对出现角膜水肿者进行针对性的护理。结果:65眼老年性白内障术后出现不同程度的角膜水肿。其中,轻度角膜水肿50眼,3d内恢复透明;中度角膜水肿8眼,5d内消退恢复透明;重度角膜水肿5眼,10~25d内消退恢复透明。2眼重度角膜水肿者晶体状体核硬度均为v级核。结论:术后做好裂隙灯下角膜观察及护理,有利于手
期刊
摘 要目的:了解如何护理好新生儿败血症的患儿。方法:通过对45例新生儿败血症患儿的观察,本文从6个方面阐述了护理新生儿败血症的方法。结果:45例新生儿败血症绝大多数达到了治疗效果,减少了并发症和后遗症。结论:护理是综合治疗的关键环节。  关键词新生儿败血症;观察护理体会    新生儿败血症是目前新生儿期常见的、严重的细菌感染性疾病,发病率及死亡很率高。由于新生儿抵抗力弱,皮肤粘膜薄嫩易破损及脐部未
期刊
拍摄拉丝奶酪需要什么工具  现在有很多家庭大厨喜欢在家里捣腾,分享朋友圈需要学习更好的摄影技巧。本周我们介绍食物摄影师如何拍摄出拉丝的比萨奶酪。  奶酪是许多西餐菜肴中常用的成分,包括比萨饼、奶酪面包、烤米饭、三明治等。奶酪拉丝效果通常用于商业食品摄影中,以增加食品的视觉吸引力,我们需要的工具如下:  1.比萨饼和装饰物,例如罗勒叶、切碎的马苏里拉奶酪和切成薄片的樱桃番茄。  2.用于布置前景和背
期刊
手足口病是一种由肠道病毒引起的能通过空气、唾液或粪便传染的疾病,以春夏季节多见,多发生于5岁以下儿童,可引起手、足、口腔等部位的疱疹,少数患儿可引起心肌炎、肺水肿、无菌性脑膜脑炎等并发症。个别重症患儿如果病情发展快,导致死亡。  引发手足口病的肠道病毒有20多种(型),其中以柯萨奇病毒A16型(Cox A16)和肠道病毒71型(EV 71)最为常见。2008年4至8月我科共收治56例手足口病患儿,
期刊
2021年,或是氢能的元年。  据多家媒体报道,隆基股份于2021年3月31日正式注册西安隆基氢能科技有限公司,隆基股份创始人李振国亲自出任新公司的董事长、总经理,标志着光伏巨头隆基股份正式切入氢能领域。  在该消息刺激之下,氢能概念股大面积飘红,成为眼下火热的“风口”。  氢能并非新鲜事物,为何一夜之间蹿红?这个市场容量到底有多大?在氢能赛道上,哪些公司值得关注?一个蕴藏十万亿元的“蓝海”  氢
期刊
摘 要分析了低体重儿形成的病因,提出了助产及产后护理的对策。  关键词低体重儿;助产护理;防范对策    医院产科的风险,关系到母子的生命安全。健康孕妇的“十月怀胎”,对其进行临床妊娠观察,确定助产和产后护理流程“一朝分娩”。然而非健康孕妇中出现的“低体重儿”,临床显示占产妇的2~3%;防范低体重儿产妇的助产及产后护理风险,确保母子平安是产科不容忽视的问题。  低出生体重儿是指不论胎龄大小,出生体
期刊
以前觉得喝茶都是上一辈和上上辈才会喝的东西,后来师姐是什么时候喜欢上喝茶的呢?大概是开始养生之后哈哈哈。打个广告,想入手其他好物的小可爱记得加师姐微信(微信号:yhmd0808)哦,同步更新福利群和朋友圈哈。柑橘搭配普洱解膩又养胃  这么多年,师姐也喝过很多茶,什么绿茶、乌龙茶、红茶、花草茶、果茶啥的。但论清爽与解腻,在春夏喝的茶中,还数普洱+青柑所制的小青柑最为合适。市面上卖小青柑的店铺也很多,
期刊
摘 要脑出血急性期具有病情重,变化快,死亡率高,并发症多的特点,便秘是脑出血常见的并发症。便秘给患者带来痛苦,同时用力排便可使颅内压骤增,使脑血管破裂再次出血。本文针对脑出血急性期患者发生便秘的原因,总结脑出血患者便秘的护理体会。  关键词脑出血急性期;便秘;护理    脑出血急性期病人需绝对卧床休息,病人因长期卧床,饮食结构及心理改变,易引起便秘,由于用力排便导致血压波动,颅内压增高,部分病人会
期刊