关于使用函数打印水仙花数的问题
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)直接是咋运作的,这个函数参数为空,他的返回值是啥啊 对,你下面那个就是调用函数了,因为水仙花数是三位数嘛,所以是在range(100,1000),这个函数不需要参数,直接的返回值就是那几个水仙花数 本帖最后由 jackz007 于 2020-3-1 19:52 编辑
def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函数 “背后” 的这一句代码就是用来调用函数的。
shuixian2() 没有 return 语句,所以,函数没有返回值,或者说,返回值是 None jackz007 发表于 2020-3-1 19:50
def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函 ...
好像明白了,意思就是shuixian2(),这个代码中的最后一句,是独立的一部分,跟def定义函数那一块已经没有关系了对吧 芥末a 发表于 2020-3-1 19:54
好像明白了,意思就是shuixian2(),这个代码中的最后一句,是独立的一部分,跟def定义函数那一块已经没有 ...
是的,代码的最后一句:
shuixian2()
正是专门用来调用函数的。 jackz007 发表于 2020-3-1 19:50
def 开始的代码是函数定义。函数是用来供别人调用的,就是说,函数中的代码得有调用才会被执行。函 ...
关于返回值的问题,打印出的水仙花数不是这个函数的返回值吗 本帖最后由 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> jackz007 发表于 2020-3-1 20:27
看来,你对函数返回值及其使用方法还不了解,我给你改写了函数 shuixian2() 有返回值的版本
...
看懂了大佬改写的代码了,我写的那个函数是没有返回值的, 调用一次就执行一次,打印结果的功能在函数里面实现了。你写的那个方法,函数里面是不带打印功能的,运行出结果后会给函数一个返回值,然后再用print函数的功能print(shuixian2())把结果打印出来。我理解的对吧。
我还有一个新的问题,就是python里面变量是可以不声明直接使用的对吧,为什么我把d=()这行代码删除就报错了,返回值需要声明类型是吗
本帖最后由 jackz007 于 2020-3-1 23:54 编辑
Python 定义变量是通过赋值来实现的,一旦赋值,就把变量与内存中的一个对象绑定在了一起。如果不事先履行这个手续,访问变量的时候,Python 即不知道变量的类型,也不知道变量的内容,就会发生错误。
这条语句
d += (i ,)
是这条语句
d = d + (i ,)
的简写形式,由于 d 出现在等号的右边,也就是说,需要被访问,这就要求 d 事先必须经过赋值。 jackz007 发表于 2020-3-1 23:52
Python 定义变量是通过赋值来实现的,一旦赋值,就把变量与内存中的一个对象绑定在了一起。如果不 ...
明白了,讲得太清楚了,感谢感谢,万分感谢
页:
[1]