鱼C论坛

 找回密码
 立即注册
查看: 2030|回复: 9

[已解决]关于使用函数打印水仙花数的问题

[复制链接]
发表于 2020-3-1 19:32:07 | 显示全部楼层 |阅读模式

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

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

x
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)直接是咋运作的,这个函数参数为空,他的返回值是啥啊
最佳答案
2020-3-1 19:50:00
本帖最后由 jackz007 于 2020-3-1 19:52 编辑

       def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函数 “背后” 的这一句代码就是用来调用函数的。
       shuixian2() 没有 return 语句,所以,函数没有返回值,或者说,返回值是 None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-1 19:48:25 | 显示全部楼层
对,你下面那个就是调用函数了,因为水仙花数是三位数嘛,所以是在range(100,1000),这个函数不需要参数,直接的返回值就是那几个水仙花数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 19:50:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-3-1 19:52 编辑

       def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函数 “背后” 的这一句代码就是用来调用函数的。
       shuixian2() 没有 return 语句,所以,函数没有返回值,或者说,返回值是 None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好像明白了,意思就是shuixian2(),这个代码中的最后一句,是独立的一部分,跟def定义函数那一块已经没有关系了对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


      是的,代码的最后一句:
shuixian2()
      正是专门用来调用函数的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 20:22:11 | 显示全部楼层
jackz007 发表于 2020-3-1 19:50
def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函 ...

关于返回值的问题,打印出的水仙花数不是这个函数的返回值吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 23:46:04 | 显示全部楼层
jackz007 发表于 2020-3-1 20:27
看来,你对函数返回值及其使用方法还不了解,我给你改写了函数 shuixian2() 有返回值的版本
  ...

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

我还有一个新的问题,就是python里面变量是可以不声明直接使用的对吧,为什么我把d=()这行代码删除就报错了,返回值需要声明类型是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 23:52:44 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-1 23:54 编辑

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

使用道具 举报

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

明白了,讲得太清楚了,感谢感谢,万分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 06:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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