鱼C论坛

 找回密码
 立即注册
查看: 2112|回复: 3

[已解决]python第18讲水仙花数问题

[复制链接]
发表于 2021-2-7 17:47:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目: 寻找水仙花数
题目要求:如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如153 = 1^3+5^3+3^3,因此153是一个水仙花数。编写一个程序,找出所有的水仙花数。
def Narcissus():
    for each in range(100, 1000):
        temp = each
        sum = 0
        while temp:
            sum = sum + (temp%10) ** 3
            temp = temp // 10  # 注意这里用地板除

        if sum == each:
            print(each, end='\t')

print("所有的水仙花数分别是:", end='')
Narcissus()

问题:1.第一行Narcissus(),这个空的括号是什么含义
          2.print水仙花数在print each下面,为什么最后还是先打印‘所有水仙花数分别是’  
          3.最后一行是什么意思,为什么删掉就不会显示结果了
          4.既然这个程序一运行就自动显示答案,那为什么要写成def函数形式而不是直接写出来
          5.这个函数要怎么调用

新手小白,问题有一点点多,还请各位大佬多多包涵!
最佳答案
2021-2-7 18:15:20
本帖最后由 Peteryo01223 于 2021-2-7 18:26 编辑

1.        函数中后面有括号,是Python开发者定的,作为函数的一部分,这题没用到。以后需要时,给函数中的变量赋值,就会写在括号里;
2.        输出时,Print打印这一行先出来,后面运行函数这一行后出来。前面一大段 def,仅仅在定义而已,程序并没有输出;
3.        最后一行,是Python在运行你前面定义的函数。虽然定义好了,但没有这最后一行,就不运行,也就不会打印。相当于你学会了开车,但没有车让你开;
4.        直接写出来,可以的,但不够灵活,函数可以通过改变里面变量,调整要求,比如果找一个4位数的,1万到10万之间的水仙花数。
如果非要直接写,那么我可以如下写。貌似精炼,其实不灵活,是个笨办法,没有通用性:
for answer in range(100,1000):
    if (answer//100)**3 + ((answer//10)%10)**3 + ((answer%100)%10)**3 == answer:
        print (answer)
5.        最后一行,就是在调用函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-7 18:15:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Peteryo01223 于 2021-2-7 18:26 编辑

1.        函数中后面有括号,是Python开发者定的,作为函数的一部分,这题没用到。以后需要时,给函数中的变量赋值,就会写在括号里;
2.        输出时,Print打印这一行先出来,后面运行函数这一行后出来。前面一大段 def,仅仅在定义而已,程序并没有输出;
3.        最后一行,是Python在运行你前面定义的函数。虽然定义好了,但没有这最后一行,就不运行,也就不会打印。相当于你学会了开车,但没有车让你开;
4.        直接写出来,可以的,但不够灵活,函数可以通过改变里面变量,调整要求,比如果找一个4位数的,1万到10万之间的水仙花数。
如果非要直接写,那么我可以如下写。貌似精炼,其实不灵活,是个笨办法,没有通用性:
for answer in range(100,1000):
    if (answer//100)**3 + ((answer//10)%10)**3 + ((answer%100)%10)**3 == answer:
        print (answer)
5.        最后一行,就是在调用函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-2-7 18:43:55 | 显示全部楼层
1.表示所定义函数有哪些自变量,用括号括起来。就相当于高中函数题 f(x)=x+1一样,括号里x是自变量。你看到这个例子括号里没有东西,是因为下面有句for each in range(100, 1000):,这个each就相当于自变量了,在区间【100,1000)按要求取值。要调用这个函数就直接输入Narcissus()。如果去掉for each in range(100, 1000),那就要输入Narcissus(100),运行:Narcissus(101),运行;Narcissus(102),运行......Narcissus(999),运行。一直重复才能达到前面那种的效果,
2.因为12行以前你是在定义一个函数,即告诉python碰到Narcissus()该干嘛。第12行才是真正开始运行程序。就相当于,你妈在9点告诉你12点该吃午饭(1到10行定义Narcissus()),不过现在,先去学习(print("所有的水仙花数分别是:", end=''))。学完已经12点了,那吃饭(运行Narcissus())
3.即调用你前面定义的Narcissus()函数,删了就是没调用这个函数,那python只运行print("所有的水仙花数分别是:", end=''),只显示’所有的水仙花数分别是:‘
4.可能是教学需要吧,可以改成你要求的。
5.就直接输入Narcissus()就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-7 22:42:08 | 显示全部楼层
小虾林中游 发表于 2021-2-7 18:43
1.表示所定义函数有哪些自变量,用括号括起来。就相当于高中函数题 f(x)=x+1一样,括号里x是自变量。你看 ...

好的好的明白了,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 02:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表