芥末a 发表于 2020-3-1 19:32:07

关于使用函数打印水仙花数的问题

def shuixian2():
    for i in range(100, 1000):
      if i == (i % 10) ** 3 + (i % 100 // 10) ** 3 + (i // 100) ** 3:
            print(i)
shuixian2()

这是我自己写的一个函数,不懂的一点就是为什么要在函数背后加上shuixian2()才会正确输出结果。这属于函数递归了吗,搞不懂这个函数在range(100,1000)直接是咋运作的,这个函数参数为空,他的返回值是啥啊

Siren0327 发表于 2020-3-1 19:48:25

对,你下面那个就是调用函数了,因为水仙花数是三位数嘛,所以是在range(100,1000),这个函数不需要参数,直接的返回值就是那几个水仙花数

jackz007 发表于 2020-3-1 19:50:00

本帖最后由 jackz007 于 2020-3-1 19:52 编辑

       def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函数 “背后” 的这一句代码就是用来调用函数的。
       shuixian2() 没有 return 语句,所以,函数没有返回值,或者说,返回值是 None

芥末a 发表于 2020-3-1 19:54:49

jackz007 发表于 2020-3-1 19:50
def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函 ...

好像明白了,意思就是shuixian2(),这个代码中的最后一句,是独立的一部分,跟def定义函数那一块已经没有关系了对吧

jackz007 发表于 2020-3-1 19:58:28

芥末a 发表于 2020-3-1 19:54
好像明白了,意思就是shuixian2(),这个代码中的最后一句,是独立的一部分,跟def定义函数那一块已经没有 ...

      是的,代码的最后一句:
shuixian2()
      正是专门用来调用函数的。

芥末a 发表于 2020-3-1 20:22:11

jackz007 发表于 2020-3-1 19:50
def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函 ...

关于返回值的问题,打印出的水仙花数不是这个函数的返回值吗

jackz007 发表于 2020-3-1 20:27:20

本帖最后由 jackz007 于 2020-3-1 20:31 编辑

芥末a 发表于 2020-3-1 20:22
关于返回值的问题,打印出的水仙花数不是这个函数的返回值吗

      看来,你对函数返回值及其使用方法还不了解,我给你改写了函数 shuixian2() 有返回值的版本
      你可以自己体会一下区别
def shuixian2():
    d = ()
    for i in range(100 , 1000):
      if i == (i % 10) ** 3 + (i % 100 // 10) ** 3 + (i // 100) ** 3:
            d += (i ,)
    return d
print(shuixian2())
      在本例中,调用函数 shuixian2() 会返回一个元组,其中的元素就是 100 ~ 1000 之间所有的水仙花数,用 print() 直接把这个结果打印出来就好了。
      运行实况:
C:\Bin>python x.py
(153, 370, 371, 407)

C:\Bin>

芥末a 发表于 2020-3-1 23:46:04

jackz007 发表于 2020-3-1 20:27
看来,你对函数返回值及其使用方法还不了解,我给你改写了函数 shuixian2() 有返回值的版本
...

看懂了大佬改写的代码了,我写的那个函数是没有返回值的, 调用一次就执行一次,打印结果的功能在函数里面实现了。你写的那个方法,函数里面是不带打印功能的,运行出结果后会给函数一个返回值,然后再用print函数的功能print(shuixian2())把结果打印出来。我理解的对吧。

我还有一个新的问题,就是python里面变量是可以不声明直接使用的对吧,为什么我把d=()这行代码删除就报错了,返回值需要声明类型是吗

jackz007 发表于 2020-3-1 23:52:44

本帖最后由 jackz007 于 2020-3-1 23:54 编辑

      Python 定义变量是通过赋值来实现的,一旦赋值,就把变量与内存中的一个对象绑定在了一起。如果不事先履行这个手续,访问变量的时候,Python 即不知道变量的类型,也不知道变量的内容,就会发生错误。
      这条语句
            d += (i ,)
      是这条语句
            d = d + (i ,)
      的简写形式,由于 d 出现在等号的右边,也就是说,需要被访问,这就要求 d 事先必须经过赋值。

芥末a 发表于 2020-3-1 23:58:29

jackz007 发表于 2020-3-1 23:52
Python 定义变量是通过赋值来实现的,一旦赋值,就把变量与内存中的一个对象绑定在了一起。如果不 ...

明白了,讲得太清楚了,感谢感谢,万分感谢
页: [1]
查看完整版本: 关于使用函数打印水仙花数的问题