python求助:TypeError: 'NoneType' object is not iterable

weixin_42158910 2020-09-14 11:16:07
#计算一个字符串中最长的 回文子串
s="abcicbads"
def create_echo(s):
temp,max_p,length="","",len(s)
for i in range(length):
left1,right1=i,i
def compare(l,r):
while l != -1 and r != length and s[l]==s[r]:
l,r=l-1,r+1
if l == -1 or r == length:
return s[l+1:r]
temp=compare(left1,right1)
if len(temp)>len(max_p): #此行报错TypeError: 'NoneType' object is not iterable
max_p=temp
if s[i]==s[i+1]:
left2,right2=i,i+1
temp=compare(left2,right2)
if len(temp)>len(max_p):
max_p=temp
return max_p
print(create_echo(s))


求各位大神解答
...全文
2014 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rrrr336 2020-09-16
  • 打赏
  • 举报
回复
1. 空串是可以用len()的, 即 len("'") 等于 0 2. 你的这个算法 设计的可能有问题,至少不全面: 因为你只考虑了 abcba 是 回文, 还有这种: abccba 也是回文,也需要考虑 (上面的abccba,第一个c 的两边是b和c, 并不相等)
放风喽 2020-09-15
  • 打赏
  • 举报
回复
max_p="" 所以不能len
rrrr336 2020-09-15
  • 打赏
  • 举报
回复
你的 def compare(l, r)函数存在没有返回值的情况: 因为 其中的 while 有三个条件,如果前两个满足、但第三个条件不满足时,即 s[l] != s[r] 时,退出while, 这个时候,下面的if 不满足,就没有对应的return 语句了,就是说没有返回值。 所以 下面的 temp = None, len(temp) 就出错了。 另外, 再下一行, s[i] == s[i+1], 当 i= length-1 时(i是从0开始的), i+1 就溢出了,即 out of range 了。
放风喽 2020-09-15
  • 打赏
  • 举报
回复
max_p=[]
weixin_42158910 2020-09-15
  • 打赏
  • 举报
回复
引用 1 楼 rrrr336 的回复:
你的 def compare(l, r)函数存在没有返回值的情况: 因为 其中的 while 有三个条件,如果前两个满足、但第三个条件不满足时,即 s[l] != s[r] 时,退出while, 这个时候,下面的if 不满足,就没有对应的return 语句了,就是说没有返回值。 所以 下面的 temp = None, len(temp) 就出错了。 另外, 再下一行, s[i] == s[i+1], 当 i= length-1 时(i是从0开始的), i+1 就溢出了,即 out of range 了。
了解了,确实compare没有返回值的时候,temp为None,那我是需要判断temp是否为None之后,再进下一个if吗
weixin_42158910 2020-09-15
  • 打赏
  • 举报
回复
引用 2 楼 天不绝我 的回复:
max_p="" 所以不能len
但是max_p必须得初始化,如果max_p=""的len()非法,那应该是如何修改呢

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧