KAKA学python 发表于 2021-2-7 17:47:12

python第18讲水仙花数问题

题目: 寻找水仙花数
题目要求:如果一个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.这个函数要怎么调用

新手小白,问题有一点点多,还请各位大佬多多包涵!

Peteryo01223 发表于 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.        最后一行,就是在调用函数。

小虾林中游 发表于 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()就好了

KAKA学python 发表于 2021-2-7 22:42:08

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

好的好的明白了,谢谢大佬{:5_92:}
页: [1]
查看完整版本: python第18讲水仙花数问题