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

CS50作业:如何简化代码并避免扩展名与条件重复?

简化CS50 Extensions习题集代码的方案

你的代码确实存在冗余问题:重复定义扩展名分组、重复判断逻辑、重复执行字符串分割操作。可以通过字典映射的方式彻底简化代码,把扩展名与MIME类型的对应关系集中管理,避免重复。

优化后的代码

file_name = input("File name: ").strip().lower()

# 提取文件的扩展名(处理文件名含多个点的情况)
extension = '.' + file_name.rsplit('.', 1)[1] if '.' in file_name else ''

# 建立扩展名到MIME类型的映射表
mime_map = {
    ".gif": "image/gif",
    ".jpg": "image/jpg",
    ".jpeg": "image/jpeg",
    ".png": "image/png",
    ".pdf": "application/pdf",
    ".zip": "application/zip",
    ".txt": "text/txt"
}

# 查找对应类型,无匹配则用默认值
print(mime_map.get(extension, "application/octet-stream"))

优化思路说明

  1. 集中管理映射关系:用字典把所有扩展名和对应的MIME类型绑定,后续新增类型只需在字典里加一行,无需修改逻辑代码,扩展性更强。
  2. 一次性提取扩展名:用rsplit('.', 1)从右往左分割一次,确保即使文件名包含多个点(比如report.v2.pdf),也能正确拿到最后一个扩展名。
  3. 避免重复判断:通过字典的get()方法直接查找结果,替代原代码中多个elif的重复判断,代码更简洁。
  4. 修复原代码小问题:原代码中extension_text = ("txt")实际是字符串而非元组,可能导致endswith判断异常,优化后的写法彻底避免了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:46:09