zb1216 发表于 2019-10-20 00:17:35

求助关于Python入门的24讲课后习题



可以正常运行

横线这里为什么不能加int()
报错提示:

jackz007 发表于 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
            

hyolyn 发表于 2019-10-20 07:03:22

遍历到最后一次 没有字符串了,不能把空字符串转为int类型,顺便楼上傻子.

hyolyn 发表于 2019-10-20 07:08:22

jackz007 发表于 2019-10-20 02:05
楼主代码的逻辑存在严重问题,递归将没有终点

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


第一答非所问 ,第二,发三段代码,两个有误不达意,还来回答.666

zb1216 发表于 2019-10-20 11:14:33

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

谢谢解答

zb1216 发表于 2019-10-20 11:22:13

jackz007 发表于 2019-10-20 02:05
楼主代码的逻辑存在严重问题,递归将没有终点

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


谢谢解答。这个递归有终点哦,类似你发的第三段代码;从你的解答中意识到使用负数索引可以让有些地方看起来更简洁,谢谢。

jackz007 发表于 2019-10-20 12:38:56

小子,说话客气点,30年前,老子玩 DOS 、UNIX 软件破解的时候,你恐怕还是分子原子电子吧。

zltzlt 发表于 2019-10-20 13:24:45

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

{:10_250:}

jackz007 发表于 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 楼那么气盛,怎么不给出建设性意见和解决方案?严重鄙视(注意:并非针对楼主)!!!

页: [1]
查看完整版本: 求助关于Python入门的24讲课后习题