You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:08:14