鱼C论坛

 找回密码
 立即注册
查看: 2645|回复: 8

[已解决]求助关于Python入门的24讲课后习题

[复制链接]
发表于 2019-10-20 00:17:35 | 显示全部楼层 |阅读模式

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

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

x

1.png
可以正常运行
2.png
横线这里为什么不能加int()
报错提示:
3.png
最佳答案
2019-10-20 07:03:22
遍历到最后一次 没有字符串了,不能把空字符串转为int类型,顺便楼上傻子.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-20 02:05:49 | 显示全部楼层
本帖最后由 jackz007 于 2019-10-20 02:11 编辑

      楼主代码的逻辑存在严重问题,递归将没有终点
  1.         n1 = str(n)
  2.         if len(n1) :  # 此条件永远成立
复制代码

      递归将永远持续下去,直到运行奔溃
      所以,应该这么修改:
  1. def get_digits(n):
  2.         n1 = str(n)
  3.         if len(n1) > 1:
  4.             result . insert(0 , int(n1[-1]))
  5.             get_digits(int(n1[:-1]))
  6.         else:                             # n1 只有 1 个字符
  7.             result . insert(0 , int(n1))  # 递归终点
  8. result = []
  9. get_digits(123456)
  10. print result
复制代码


      当然,最简洁的是以下代码:
  1. def get_digits(n):
  2.     if n:
  3.         result . insert(0 , n % 10)
  4.         get_digits(n // 10)
  5. result = []
  6. get_digits(123456)
  7. print result
复制代码

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

使用道具 举报

发表于 2019-10-20 07:03:22 | 显示全部楼层    本楼为最佳答案   
遍历到最后一次 没有字符串了,不能把空字符串转为int类型,顺便楼上傻子.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-20 07:08:22 | 显示全部楼层
jackz007 发表于 2019-10-20 02:05
楼主代码的逻辑存在严重问题,递归将没有终点

      递归将永远持续下去,直到运行奔溃

第一答非所问 ,第二,发三段代码,两个有误不达意,还来回答.666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-20 11:14:33 | 显示全部楼层
hyolyn 发表于 2019-10-20 07:03
遍历到最后一次 没有字符串了,不能把空字符串转为int类型,顺便楼上傻子.

谢谢解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-20 11:22:13 | 显示全部楼层
jackz007 发表于 2019-10-20 02:05
楼主代码的逻辑存在严重问题,递归将没有终点

      递归将永远持续下去,直到运行奔溃

谢谢解答。这个递归有终点哦,类似你发的第三段代码;从你的解答中意识到使用负数索引可以让有些地方看起来更简洁,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-20 12:38:56 From FishC Mobile | 显示全部楼层
小子,说话客气点,30年前,老子玩 DOS 、UNIX 软件破解的时候,你恐怕还是分子原子电子吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-20 13:24:45 | 显示全部楼层
jackz007 发表于 2019-10-20 12:38
小子,说话客气点,30年前,老子玩 DOS 、UNIX 软件破解的时候,你恐怕还是分子原子电子吧。

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

使用道具 举报

发表于 2019-10-20 14:47:50 | 显示全部楼层
本帖最后由 jackz007 于 2019-10-20 17:25 编辑
zb1216 发表于 2019-10-20 11:22
谢谢解答。这个递归有终点哦,类似你发的第三段代码;从你的解答中意识到使用负数索引可以让有些地方看起 ...


     有终点吗?
  1. def get_digits(n):
  2.     n1 = str(n)
  3.     if len(n1):
  4.         result . insert(0 , int(n1[-1]))
  5.         get_digits(int(n1[:-1]))
  6. result = []
  7. print get_digits(123456)
复制代码

  1. C:\Bin>python x.py
  2. Traceback (most recent call last):
  3.   File "x.py", line 7, in <module>
  4.     print get_digits(123456)
  5.   File "x.py", line 5, in get_digits
  6.     get_digits(int(n1[:-1]))
  7.   File "x.py", line 5, in get_digits
  8.     get_digits(int(n1[:-1]))
  9.   File "x.py", line 5, in get_digits
  10.     get_digits(int(n1[:-1]))
  11.   File "x.py", line 5, in get_digits
  12.     get_digits(int(n1[:-1]))
  13.   File "x.py", line 5, in get_digits
  14.     get_digits(int(n1[:-1]))
  15.   File "x.py", line 5, in get_digits
  16.     get_digits(int(n1[:-1]))
  17. ValueError: invalid literal for int() with base 10: ''

  18. C:\Bin>
复制代码


        是有终点,不过,递归过程是因出错而终结,原因就是楼主的代码放弃或忽略了对此错误的预见和防范,而我修改的代码所针对的正是这个问题。从而也间接的回答了楼主提问能不能加 int() 的问题,答案很显然,当然是能加!

        我的代码都是经过实际测试的,没有任何问题,print() 没有加括号是因为我使用 Python 2.7

        3 楼那么气盛,怎么不给出建设性意见和解决方案?严重鄙视(注意:并非针对楼主)!!!

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 14:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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