有一类数字被称为"水仙花数",也被称为“自恋数”、“阿姆斯特朗数”。水仙花数是一类特殊的自然数,水仙花数是指一个3位数,它的每个位上的数字的立方和等于它本身。本文将以Python为工具,通过编写水仙花数的程序,通过编程展示程序设计的巧妙之处。代码可分享呀。
举例如下:
abc=a^3+b^3+c^3
例如,是一个水仙花数,因为(1^3+5^3+3^3=)。
2.编写水仙花数的Python程序让我们一步步来编写一个简单的Python程序,用于寻找水仙花数。
步骤1:获取用户输入范围首先,我们需要获取用户输入的范围,以确定在哪个区间内寻找水仙花数。我们可以使用input函数来实现这一步骤。注意,水仙花数是一个三位数,所以输入范围要合理。比如起始,结束。
start=int(input("请输入起始范围:"))end=int(input("请输入结束范围:"))步骤2:寻找水仙花数
接下来,我们使用循环遍历指定范围内的每个数字,并检查是否是水仙花数。
fornuminrange(start,end+1):#获取每位数字temp=numsum=0whiletemp0:digit=temp%10sum1+=digit**3temp//=10#判断是否为水仙花数ifnum==sum1:print(num)
下面是for循环的工作原理:
迭代范围内的每个数字:通过fornuminrange(start,end+1),我们遍历了从起始范围到结束范围(包括边界值)的所有数字。
获取每位数字的立方和:对于每个数字num,我们使用一个临时变量temp来保存num的副本。然后,通过一个while循环,我们从temp中逐位取出数字,计算其立方和,并将结果累加到sum1变量中。while循环通过取余数操作temp%10获取temp的个位数字,计算其立方和,并将temp更新为去掉个位的剩余部分。这个过程一直循环,直到temp变为0。
判断是否为水仙花数:在每次迭代中,我们都会检查num是否等于sum,如果相等,则说明这个数字是水仙花数。
步骤3:运行程序最后,我们将上述代码整合在一起,并运行程序,看看在指定范围内有哪些水仙花数被找到。
start=int(input("请输入起始范围:"))end=int(input("请输入结束范围:"))fornuminrange(start,end+1):temp=numsum1=0whiletemp0:digit=temp%10sum1+=digit**3temp//=10ifnum==sum1:print(num)
通过运行这个程序,得到指定范围内的水仙花数列表。比如起始,结束。,对应结果如下:
当然,还有其他方法来编写水仙花数的程序。下面,我将介绍一种使用列表推导式(ListComprehension)的方法,以及一种利用函数的方法,让我们一起看看。3.方法二:列表推导式列表推导式是Python中一种简洁而强大的构建列表的方法,我们可以使用它来找出水仙花数。下面是相应的代码:
start=int(input("请输入起始范围:"))end=int(input("请输入结束范围:"))#使用列表推导式找出水仙花数narcissistic_numbers=[numfornuminrange(start,end+1)ifnum==sum(int(digit)**3fordigitinstr(num))]print(narcissistic_numbers)
这个方法使用了列表推导式和字符串迭代,将每个数字的每个位上的立方和计算出来,并通过条件判断筛选出水仙花数。这种写法更为简洁,但可能在性能上略逊于循环方法。同样,起始,结束。
4.方法三:使用函数我们也可以将水仙花数的判断过程封装成一个函数,提高代码的可读性和复用性:
defis_narcissistic(num):returnnum==sum(int(digit)**3fordigitinstr(num))start=int(input("请输入起始范围:"))end=int(input("请输入结束范围:"))#使用函数找出水仙花数narcissistic_numbers=[numfornuminrange(start,end+1)ifis_narcissistic(num)]print(narcissistic_numbers)
如下呀,起始,结束。得到一样的结果。
这种方法通过函数is_narcissistic将判断水仙花数的逻辑封装起来,使得主程序更为清晰。以上这三种方法各有特点,无论使用哪种方法,都能达到相同的效果,展示了Python编程的灵活性和多样性。
5.结论通过编写这个简单的水仙花数程序,我们不仅学到了如何使用Python进行基本的用户输入和循环操作,还理解了水仙花数背后的数学原理。通过这个博客,希望我们对水仙花数有了更深入的了解,并能够通过编写简单的程序呀。