鱼C论坛

 找回密码
 立即注册
查看: 1989|回复: 7

[已解决]关于python基础中的24、25课后题的疑问

[复制链接]
发表于 2016-11-9 11:51:51 | 显示全部楼层 |阅读模式

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

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

x
result = []
def get_digits(n):
        if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)

get_digits(12345)
print(result)


result 列表是一个全局变量,在函数 get_digits()中被引用,然后被改变值,result.insert(0,n%10) 不算是改变了result的值了吗,为什么没有报错。

另外。如果将脚本改成下面的样子。为什么会返回一个None。
result = []
def get_digits(n):
        if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)
        else:
                return result

i = get_digits(12345)
print (i)


求解答
最佳答案
2016-11-23 10:39:47
  1. result = []
  2. def get_digits(n):
  3.         if n > 0:
  4.                 result.insert(0, n%10)
  5.                 get_digits(n//10)
  6.                 return result
  7.         else:
  8.                 return result
  9. i = get_digits(12345)
  10. print (i)
复制代码

1.先回答lZ第儿个问题,改进后的程序之所以会返回None,是因为当n>0的时候没有返回值,只要在n>0的时候返回一个return result就会返回正确的值

2.第一个问题其实result不算是一个变量,所以在函数中是可以使用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-23 10:39:47 | 显示全部楼层    本楼为最佳答案   
  1. result = []
  2. def get_digits(n):
  3.         if n > 0:
  4.                 result.insert(0, n%10)
  5.                 get_digits(n//10)
  6.                 return result
  7.         else:
  8.                 return result
  9. i = get_digits(12345)
  10. print (i)
复制代码

1.先回答lZ第儿个问题,改进后的程序之所以会返回None,是因为当n>0的时候没有返回值,只要在n>0的时候返回一个return result就会返回正确的值

2.第一个问题其实result不算是一个变量,所以在函数中是可以使用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-24 10:25:18 | 显示全部楼层
小茗同学 发表于 2016-11-23 10:39
1.先回答lZ第儿个问题,改进后的程序之所以会返回None,是因为当n>0的时候没有返回值,只要在n>0的时候返 ...

第一个问题明白了,第二个问题还是有点不明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2016-11-24 20:31:47 | 显示全部楼层
ssz940728 发表于 2016-11-24 10:25
第一个问题明白了,第二个问题还是有点不明白。

就是如果定义的是int类型之类的,不能再方法中改变,想字符串,列表,字典类的都可以在方法总调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-25 09:31:24 | 显示全部楼层
小茗同学 发表于 2016-11-24 20:31
就是如果定义的是int类型之类的,不能再方法中改变,想字符串,列表,字典类的都可以在方法总调用

这个我明白了,就是那个是None的那个有点不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-25 10:53:14 | 显示全部楼层
ssz940728 发表于 2016-11-25 09:31
这个我明白了,就是那个是None的那个有点不明白

那个None我第一次已经说过了,是因为你自己写的程序当n>0的时候没有返回值,加一个return就好了,因为在程序的末尾你只是调用的get_digits()函数,里面并没有输出,所以只返回else中的result是空
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-26 12:53:54 | 显示全部楼层
小茗同学 发表于 2016-11-25 10:53
那个None我第一次已经说过了,是因为你自己写的程序当n>0的时候没有返回值,加一个return就好了,因为在 ...

我看了半天也有点迷惑了,函数每次运行都会先计算余数然后添加到列表中,最后返回列表,不是应该有数据吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2016-11-28 10:04:42 | 显示全部楼层
xinshouxuexi 发表于 2016-11-26 12:53
我看了半天也有点迷惑了,函数每次运行都会先计算余数然后添加到列表中,最后返回列表,不是应该有数据吗
  1. i = get_digits(12345)
  2. print(result)
复制代码

如果在函数的末尾写上print(result)就会输出[1, 2, 3, 4, 5],但是LZ输出的是i,所以只能当n<0时有个return还是空值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 16:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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