Python ';非类型';对象不可iterable-带返回值的循环
这段代码的目的是按字母顺序查找最先出现的最长字符串并返回该子集 我可以执行一次代码,但当我尝试循环它时,我得到的“NoneType”对象是不可编辑的(指向最后一行)。我已经确保我返回和输入的都不是非类型的,所以我觉得我缺少了一个基本的 这是我在课堂上的第一个项目,所以代码不需要是“最好的”或最有效的方式-它只是关于在这一点上学习基础知识Python ';非类型';对象不可iterable-带返回值的循环,python,python-2.7,Python,Python 2.7,这段代码的目的是按字母顺序查找最先出现的最长字符串并返回该子集 我可以执行一次代码,但当我尝试循环它时,我得到的“NoneType”对象是不可编辑的(指向最后一行)。我已经确保我返回和输入的都不是非类型的,所以我觉得我缺少了一个基本的 这是我在课堂上的第一个项目,所以代码不需要是“最好的”或最有效的方式-它只是关于在这一点上学习基础知识 s = 'efghiabcdefg' best = '' comp = '' temp = '' def prog(comp, temp, best, s):
s = 'efghiabcdefg'
best = ''
comp = ''
temp = ''
def prog(comp, temp, best, s):
for char in s:
if comp <= char: #Begins COMParison of first CHARacter to <null>
comp = char #If the following character is larger (alphabetical), stores that as the next value to compare to.
temp = temp + comp #Creates a TEMPorary string of characters in alpha order.
if len(temp) > len(best): #Accepts first string as longest string, then compares subsequent strings to the "best" length string, replacing if longer.
best = temp
if len(best) == len(s): #This is the code that was added...
return(s, best) #...to fix the problem.
else:
s = s.lstrip(temp) #Removes those characters considered in this pass
return (str(s), str(best)) #Provides new input for subsequent passes
while len(s) != 0:
(s, best) = prog(comp, temp, best, s)
s='efghiabcdefg'
最佳=“”
comp=“”
温度=“”
def程序(组件、温度、最佳、s):
对于s中的字符:
if comp len(best):#接受第一个字符串作为最长字符串,然后将后续字符串与“best”长度字符串进行比较,如果长度较长,则替换。
最佳=温度
如果len(best)=len(s):#这是添加的代码。。。
返回(s,最佳)#…以解决问题。
其他:
s=s.lstrip(temp)#删除此过程中考虑的字符
return(str(s),str(best))#为后续过程提供新的输入
而len(s)!=0:
(s,最佳)=程序(公司,临时,最佳,s)
prog
正在返回None
。当您试图将结果解包到元组中时,会出现错误
您需要修复逻辑,以确保
prog
不会返回None
。如果您的代码从未执行循环中的else
子句,它将返回None
。在所有情况下,您都不会返回
。在Python中,如果函数结束时没有显式的return
语句,它将返回None
例如,如果输入字符串为空,请考虑返回一些内容 请修正你的缩进;
prog
功能在哪里结束?另外,您在else
块中的break
也是无用的。当点击return
时,执行将停止。您可以包含错误的完整回溯吗?因为这是python,缩进是语义的,而不仅仅是美学的。所以,修正你的缩进。另外,您确定函数中的所有代码路径都返回一个值吗?@MartijnPieters-我现在正在尝试学习如何进行完整的回溯。这是我的第一周,这就解决了!谢谢你帮助我了解出了什么问题。通过添加:if len(best)==len(s)return(best)…在else之前,我能够得到预期的结果。如果我有15个名声,我会投你一票!