CS50P Problem Set8 Cookie Jar check50报错:withdraw方法测试失败
问题分析与解决方法
错误根源
你的Jar类withdraw方法的判断逻辑存在问题:
if n <= self.capacity and n < self.size:
这里的n < self.size限制了只能取出少于当前饼干总数的数量,当测试用例尝试取出全部饼干(即n == self.size)时,条件不满足,代码会抛出ValueError,导致程序退出码为1,而check50预期正常执行(退出码0),因此触发报错。
另外,n <= self.capacity这个判断是多余的——因为当前饼干数量self.size不会超过self.capacity,所以取出的数量n最多等于self.size,必然不会超过capacity。
修复后的代码
修改withdraw方法的判断逻辑,允许取出等于当前数量的饼干,同时增加对n为正整数的校验(避免取出负数或0数量的饼干):
def withdraw(self, n): if n > 0 and n <= self.size: self._size -= n else: raise ValueError
额外优化建议
__init__方法中抛出ValueError时最好附带错误信息,方便调试:raise ValueError("Capacity must be a positive integer")deposit方法也可以简化逻辑并增加正整数校验:def deposit(self, n): if n > 0 and n + self.size <= self.capacity: self._size += n else: raise ValueError
内容的提问来源于stack exchange,提问作者Hosein Zadeh Mohammadi
相关产品推荐
相关产品推荐

