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

CS50 Python作业numb3rs问题:check50报错exit code不符求助

CS50 numb3rs作业问题排查与解决

核心问题分析

你遇到的check50错误本质是两个问题:

  • 退出码逻辑颠倒:合法IPv4返回了1而非0
  • 程序异常崩溃:部分测试用例触发了未捕获的异常,导致测试无法执行

常见错误点与修正方案

1. 退出码逻辑搞反

检查main函数的判断逻辑,CS50要求:

  • 输入合法IPv4时,程序退出码为0
  • 输入不合法/参数错误时,退出码为1

错误示例:

# 错误:合法时退出码1,不合法时0
if validate(ip):
    sys.exit(1)
else:
    sys.exit(0)

修正后的main函数:

import sys

def main():
    # 检查命令行参数数量是否为1
    if len(sys.argv) != 2:
        sys.exit(1)
    ip = sys.argv[1]
    if validate(ip):
        sys.exit(0)
    else:
        sys.exit(1)

2. validate函数未处理异常场景

如果validate没有处理非数字段、空段、段数不对等情况,会触发ValueError或索引错误,导致程序崩溃,check50无法完成测试。

正确的validate函数实现:

def validate(ip):
    # 按点分割IP段
    parts = ip.split('.')
    # 必须正好4段
    if len(parts) != 4:
        return False
    for part in parts:
        # 检查是否为纯数字(排除空字符串、字母、负号)
        if not part.isdigit():
            return False
        num = int(part)
        # 检查数值范围0-255
        if num < 0 or num > 255:
            return False
    return True

3. 测试用例覆盖不全

确保test_numb3rs.py覆盖所有边界场景:

from numb3rs import validate

def test_validate():
    # 合法IP
    assert validate("1.2.3.4") == True
    assert validate("255.255.255.255") == True
    assert validate("0.0.0.0") == True
    # 段数错误
    assert validate("1.2.3") == False
    assert validate("1.2.3.4.5") == False
    # 非数字段
    assert validate("1.a.3.4") == False
    assert validate("1..3.4") == False
    # 数值超出范围
    assert validate("256.1.1.1") == False
    assert validate("-1.2.3.4") == False

验证步骤

  1. 先运行本地测试:pytest test_numb3rs.py -v,确保所有测试通过
  2. 手动验证命令行退出码:
    • 合法IP:python numb3rs.py 1.1.1.1,执行后输入echo $?(Linux/macOS)或echo %errorlevel%(Windows),应返回0
    • 非法IP:python numb3rs.py 256.1.1.1,应返回1
    • 参数错误:python numb3rs.py(无参数)或python numb3rs.py 1.1.1.1 2.2.2.2(多参数),应返回1

完成以上修正后,再运行check50即可通过所有测试。

内容的提问来源于stack exchange,提问作者WalkedCreator65

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:44:58