求助关于Python入门的24讲课后习题
可以正常运行
横线这里为什么不能加int()
报错提示:
本帖最后由 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
遍历到最后一次 没有字符串了,不能把空字符串转为int类型,顺便楼上傻子. jackz007 发表于 2019-10-20 02:05
楼主代码的逻辑存在严重问题,递归将没有终点
递归将永远持续下去,直到运行奔溃
第一答非所问 ,第二,发三段代码,两个有误不达意,还来回答.666 hyolyn 发表于 2019-10-20 07:03
遍历到最后一次 没有字符串了,不能把空字符串转为int类型,顺便楼上傻子.
谢谢解答 jackz007 发表于 2019-10-20 02:05
楼主代码的逻辑存在严重问题,递归将没有终点
递归将永远持续下去,直到运行奔溃
谢谢解答。这个递归有终点哦,类似你发的第三段代码;从你的解答中意识到使用负数索引可以让有些地方看起来更简洁,谢谢。 小子,说话客气点,30年前,老子玩 DOS 、UNIX 软件破解的时候,你恐怕还是分子原子电子吧。 jackz007 发表于 2019-10-20 12:38
小子,说话客气点,30年前,老子玩 DOS 、UNIX 软件破解的时候,你恐怕还是分子原子电子吧。
{:10_250:} 本帖最后由 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]