鱼C论坛

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

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

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

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

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

x

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

使用道具 举报

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

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

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

      当然,最简洁的是以下代码:
def get_digits(n):
    if n:
        result . insert(0 , n % 10)
        get_digits(n // 10)
result = []
get_digits(123456)
print result
              
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-20 07:03:22 | 显示全部楼层    本楼为最佳答案   
遍历到最后一次 没有字符串了,不能把空字符串转为int类型,顺便楼上傻子.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

第一答非所问 ,第二,发三段代码,两个有误不达意,还来回答.666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

谢谢解答。这个递归有终点哦,类似你发的第三段代码;从你的解答中意识到使用负数索引可以让有些地方看起来更简洁,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


     有终点吗?
def get_digits(n):
    n1 = str(n)
    if len(n1):
        result . insert(0 , int(n1[-1]))
        get_digits(int(n1[:-1]))
result = []
print get_digits(123456)
C:\Bin>python x.py
Traceback (most recent call last):
  File "x.py", line 7, in <module>
    print get_digits(123456)
  File "x.py", line 5, in get_digits
    get_digits(int(n1[:-1]))
  File "x.py", line 5, in get_digits
    get_digits(int(n1[:-1]))
  File "x.py", line 5, in get_digits
    get_digits(int(n1[:-1]))
  File "x.py", line 5, in get_digits
    get_digits(int(n1[:-1]))
  File "x.py", line 5, in get_digits
    get_digits(int(n1[:-1]))
  File "x.py", line 5, in get_digits
    get_digits(int(n1[:-1]))
ValueError: invalid literal for int() with base 10: ''

C:\Bin>

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

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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