鱼C论坛

 找回密码
 立即注册
查看: 1910|回复: 11

[已解决]谁能看出我代码中的return语句,无法得到返回值

[复制链接]
发表于 2018-3-24 18:25:01 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 linzhengren90 于 2018-4-7 09:04 编辑

如题,代码如下:
  1. def Bin(decimal = 0, binary = '', minus_sign = ''):
  2.     ' binary & minus_sign is for function use.'
  3.     mi = minus_sign

  4.     if decimal > 0:
  5.         dec = decimal // 2
  6.         if decimal % 2 == 1:
  7.             bi = '1' + binary
  8.         else:
  9.             bi = '0' + binary
  10.         Bin(dec, bi, mi)

  11.     elif decimal < 0:
  12.         mi = '-'
  13.         dec = -decimal
  14.         bi = binary
  15.         Bin(dec, bi, mi)

  16.     else:
  17.         if len(binary) == 0:
  18.             bi = '0b0'
  19.         else:
  20.             bi = mi + '0b' + binary
  21.         print(bi)
  22.         return bi #为什么到这里,print都有结果,return却不行

  23. de = Bin(800,'')
  24. print(de) #这里是最终验证
复制代码


运行结果如下:
  1. 0b1100100000
  2. None
  3. >>>
复制代码


代码中标注的return,出现了问题,求解答
最佳答案
2018-3-24 19:19:06
linzhengren90 发表于 2018-3-24 19:14
您好,谢谢解答,但我不是特别明白。运行到全,是说递归必须全部结束才有返回值吗?

我这里的return虽 ...

你的只有dec得0才到打印,之前的Bin一阶一阶递归到这里,只这次返回值了,明白吗
如F(7)->F(6)->F(5)->F(4)->F(3)->F(2)->F(1) F(1)返回值,而其他情况你并没有对F(2)-F(7)
的值做设定,只用了操作,因此F(2)-F(7)都是None
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-24 18:27:31 | 显示全部楼层
是我在模拟 bin() 函数练习时,想通过递归简化我的代码,现在我讲函数打包,绕过使用return语句,函数可以运行。代码如下:
  1. def Bin_base(value_base = 0):
  2.     'value_base > 0'
  3.     if value_base <= 0:
  4.         return False
  5.     else:
  6.         export = value_base //2
  7.         num = value_base % 2
  8.         final_base = str(num)
  9.         return (final_base, export)
  10.    

  11. def Bin(value = 0):
  12.     '此函数用于模拟bin(),value must be int'
  13.     minus_sign = ''
  14.     Final = ''
  15.     if value < 0:
  16.         minus_sign = '-'
  17.         value = -value
  18.         #取保值为正数,方便计算此处的value还要继续后面的计算
  19.     elif value == 0:
  20.         Final = '0b0'
  21.         return Final

  22.     a = Bin_base(value)
  23.         
  24.     while a[1] != 0:
  25.         Final = a[0] + Final
  26.         a = Bin_base(a[1])
  27.     Final = minus_sign + '0b' + a[0] + Final
  28.     return Final

  29. #以上为 bin() 的模拟运算过程

  30. while True:
  31.     #保证输入的为int
  32.     temp = input('请输入一个整数:')

  33.     if temp.isdigit() or temp[0] == '-' and temp[1:].isdigit():
  34.         decimal = int(temp)
  35.         break
  36.     else:
  37.         print('输入有误,', end = '')

  38. binary = Bin(decimal)
  39. print(binary)
  40. #输出求得的二进制数值

  41. check = bin(decimal)
  42. if check == binary :
  43.     print('经验证,答案正确')
  44. else:
  45.     print('答案有误,请检查')
  46. #验证答案是否正确
复制代码


运行结果如下:
  1. 请输入一个整数:-800
  2. -0b1100100000
  3. -0b1100100000
  4. 经验证,答案正确
  5. >>>
复制代码


综上,绝对是return语句的问题,求大神解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 18:46:13 | 显示全部楼层

回帖奖励 +1 鱼币

linzhengren90 发表于 2018-3-24 18:27
是我在模拟 bin() 函数练习时,想通过递归简化我的代码,现在我讲函数打包,绕过使用return语句,函数可以 ...

你的逻辑不对,只有递归到全显示才有返回值,那好其他时候你都没设返回值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 18:47:53 | 显示全部楼层
  1. def Bin(decimal = 0, binary = '', minus_sign = ''):
  2.     ' binary & minus_sign is for function use.'
  3.     mi = minus_sign

  4.     if decimal > 0:
  5.         dec = decimal // 2
  6.         if decimal % 2 == 1:
  7.             bi = '1' + binary
  8.         else:
  9.             bi = '0' + binary
  10.         print(dec,bi,mi)
  11.         Bin(dec, bi, mi)

  12.     elif decimal < 0:
  13.         mi = '-'
  14.         dec = -decimal
  15.         bi = binary
  16.         Bin(dec, bi, mi)

  17.     else:
  18.         if len(binary) == 0:
  19.             bi = '0b0'
  20.         else:
  21.             bi = mi + '0b' + binary
  22.         print(bi,'wocao')
  23.         return bi #为什么到这里,print都有结果,return却不行

  24. de = Bin(800)
  25. print(de) #这里是最终验证
复制代码

运行下我添加打印的就知道了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 19:14:30 | 显示全部楼层
塔利班 发表于 2018-3-24 18:47
运行下我添加打印的就知道了

您好,谢谢解答,但我不是特别明白。运行到全,是说递归必须全部结束才有返回值吗?

我这里的return虽然是最后一步,但在运行过程中,处于递归逻辑的第一层,不会有返回值。(我尝试在return后输入任何数字,也没有返回值)。你是说即使要有返回值,也要在递归逻辑的最后一层才会实现对吗?

这方面如果想了解更多,是属于哪一部分的知识呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 19:16:31 | 显示全部楼层
塔利班 发表于 2018-3-24 18:47
运行下我添加打印的就知道了

还是有点晕,明明wocao就是在最后一步
  1. 400 0
  2. 200 00
  3. 100 000
  4. 50 0000
  5. 25 00000
  6. 12 100000
  7. 6 0100000
  8. 3 00100000
  9. 1 100100000
  10. 0 1100100000
  11. 0b1100100000 wocao
  12. None
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 19:19:06 | 显示全部楼层    本楼为最佳答案   
linzhengren90 发表于 2018-3-24 19:14
您好,谢谢解答,但我不是特别明白。运行到全,是说递归必须全部结束才有返回值吗?

我这里的return虽 ...

你的只有dec得0才到打印,之前的Bin一阶一阶递归到这里,只这次返回值了,明白吗
如F(7)->F(6)->F(5)->F(4)->F(3)->F(2)->F(1) F(1)返回值,而其他情况你并没有对F(2)-F(7)
的值做设定,只用了操作,因此F(2)-F(7)都是None
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 19:21:49 | 显示全部楼层
塔利班 发表于 2018-3-24 19:19
你的只有dec得0才到打印,之前的Bin一阶一阶递归到这里,只这次返回值了,明白吗
如F(7)->F(6)->F(5)->F ...

感谢大哥,明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 19:45:34 | 显示全部楼层
塔利班 发表于 2018-3-24 19:19
你的只有dec得0才到打印,之前的Bin一阶一阶递归到这里,只这次返回值了,明白吗
如F(7)->F(6)->F(5)->F ...

我终于完成了我的递归,非常感谢大哥:

  1. def Bin(decimal = 0):
  2.     'decimal必须是整数0'

  3.     if decimal < 0:
  4.         dec = -decimal
  5.         return '-' + Bin(dec)

  6.     elif decimal > 1:
  7.         dec = decimal // 2
  8.         if decimal % 2 == 1:
  9.             return Bin(dec) + '1'
  10.         else:
  11.             return Bin(dec) + '0'

  12.     elif decimal == 1:
  13.         return '0b1'

  14.     else:
  15.         return '0b0'


  16. while True:
  17.     #保证输入的为int
  18.     temp = input('请输入一个整数:')

  19.     if temp.isdigit() or temp[0] == '-' and temp[1:].isdigit():
  20.         Decimal = int(temp)
  21.         break
  22.     else:
  23.         print('输入有误,', end = '')


  24. Binary = Bin(Decimal)
  25. print(Binary)
  26. #输出求得的二进制数值

  27. check = bin(Decimal)
  28. if check == Binary :
  29.     print('经验证,答案正确')
  30. else:
  31.     print('答案有误,请检查')
  32. #验证答案是否正确
复制代码


运行结果:
  1. 请输入一个整数:50
  2. 0b110010
  3. 经验证,答案正确
  4. >>>
  5. ================= RESTART: /Users/henry/Lin/Python/L17-4.py =================
  6. 请输入一个整数:-900
  7. -0b1110000100
  8. 经验证,答案正确
  9. >>>
  10. ================= RESTART: /Users/henry/Lin/Python/L17-4.py =================
  11. 请输入一个整数:0
  12. 0b0
  13. 经验证,答案正确
  14. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 07:43:52 | 显示全部楼层

回帖奖励 +1 鱼币

我来学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 15:48:45 | 显示全部楼层

回帖奖励 +1 鱼币

python.png   
发一个我对于递归的理解图示吧,蹭个鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 21:12:15 | 显示全部楼层

回帖奖励 +1 鱼币

看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-9 18:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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