Python代码遇NoneType不可迭代错误,求解GeeksforGeeks字符串模式问题
字符串递减子串输出问题及TypeError错误修复
我在做GeeksforGeeks的字符串模式题,要求输入字符串后按递减顺序输出子串,比如输入"Geek",要输出:
Geek Gee Ge G END
但运行代码时触发了TypeError: 'NoneType' object is not iterable错误,以下是原代码、报错信息及问题分析和修复方案:
示例
- 输入:
a = "Geek" - 输出:
Geek Gee Ge G END
原代码
#User function Template for python3 class Solution: def pattern(self, S): n = len(S) for i in range (0, n): for j in range(0, n - i) : print(S[j], end = "") print("") #{ # Driver Code Starts #Initial Template for Python 3 if __name__ == '__main__': T=int(input()) for i in range(T): S = input() # ob = Solution() answer = ob.pattern(S) for value in answer: print(value) # } Driver Code Ends
报错信息
Traceback (most recent call last): File "/home/ba2f900c4eca91e4a091a2c7bf208eb5.py", line 22, in <module> for value in answer: TypeError: 'NoneType' object is not iterable
问题分析
- 驱动代码中
ob = Solution()被注释,导致ob未实例化,调用ob.pattern(S)会直接报错(实际运行时先触发NameError,后续若修复实例化,还会因为方法无返回值导致answer为None) Solution.pattern方法没有返回可迭代对象,而是直接打印内容,驱动代码试图遍历answer(即方法返回的None),因此触发TypeError
修复后的代码
#User function Template for python3 class Solution: def pattern(self, S): result = [] n = len(S) for i in range(n): # 用切片快速获取递减子串 substring = S[:n - i] result.append(substring) # 追加要求的END result.append("END") return result #{ # Driver Code Starts #Initial Template for Python 3 if __name__ == '__main__': T=int(input()) for i in range(T): S = input() ob = Solution() answer = ob.pattern(S) for value in answer: print(value) # } Driver Code Ends
修改说明
- 取消
ob = Solution()的注释,正确创建Solution类实例 - 重构
pattern方法:不再直接打印,而是将所有递减子串存入列表,最后添加"END"并返回列表,让驱动代码可以遍历打印 - 使用字符串切片
S[:n-i]替代嵌套循环,代码更简洁高效
内容的提问来源于stack exchange,提问作者Gyanaa-Vaibhav
相关产品推荐
相关产品推荐

