Python实现栈类报TypeError: 'int'和'method'不支持+操作如何解决
问题解决方法
直接报错原因
你在sum_stack方法中往奇偶列表追加元素时,写的是self.top,这是类的方法对象本身,不是调用方法拿到的栈顶值。需要改为self.top()(加括号执行方法获取返回值),否则even和odd列表中存储的都是方法对象,执行sum计算时就会触发int和method无法相加的类型错误。
其他需修正的语法&逻辑问题
- 类内所有方法的缩进错误:Python中类的方法必须缩进在
class Stack的代码块内,你当前的方法定义和class平级,不属于Stack类的成员 __init__方法中self.stack=[] t多了无效字符t,属于语法错误- 入栈方法名不统一:你定义的入栈方法叫
stack,但后续调用时写的是p.empilhar(inter),不存在该方法,需统一命名 - 最终调用的方法名错误:你实现的计算方法叫
sum_stack,但最后调用的是不存在的p.final_result() - 栈清空逻辑错误:遍历
self.stack的同时执行pop会导致遍历不全,无法把栈完全清空,需改为while循环判断栈非空就弹出元素处理 - 缺少除零防护:如果栈内没有奇数,奇数和为0时会触发除零错误,需增加判断逻辑
修正后的完整代码
class Stack: def __init__(self): self.stack = [] self.size_stack = 0 self.even = [] self.odd = [] # 入栈方法 统一命名为empilhar对应你后续的调用 def empilhar(self, e): self.stack.append(e) self.size_stack += 1 # 出栈方法 def unstack(self): if not self.void(): self.size_stack -= 1 return self.stack.pop() def top(self): if not self.void(): return self.stack[-1] def void(self): return self.size_stack == 0 def size(self): return self.size_stack def sum_stack(self): # 用while循环清空栈 保证所有元素都被处理 while not self.void(): num = self.unstack() if num % 2 == 0: self.even.append(num) else: self.odd.append(num) result_even = sum(self.even) result_odd = sum(self.odd) # 增加除零判断 if result_odd == 0: return "奇数和为0,无法执行除法" final_result = result_even / result_odd return final_result p = Stack() n = int(input("Enter the number of digit to be entered: ")) for i in range(n): print(f"Type the {i+1}º number: ") inter = int(input()) p.empilhar(inter) print(p.sum_stack())
内容的提问来源于stack exchange,提问作者Leonardo Silvino
相关产品推荐
相关产品推荐

