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

