请求优化Python代码:将重复月份选择逻辑封装为函数
精简Python代码:消除重复的月份选择逻辑
你的代码核心问题是年份与CSV文件的绑定逻辑和月份选择逻辑大量重复,可通过以下方式彻底精简:
优化思路
- 用字典建立年份到CSV路径的映射,替代冗长的if-elif分支
- 将月份选择逻辑封装成独立函数,传入已读取的DataFrame即可,无需关心对应哪个CSV
- 优化输入验证逻辑,减少重复判断
精简后的完整代码
import pandas as pd # 年份对应的CSV路径映射,统一管理更易维护 YEAR_CSV_MAP = { 2018: "C:\\Users\\seena\\OneDrive\\Desktop\\2022-11-18 20.55.00\\Project csv ETHERIUM2018.csv", 2019: "C:\\Users\\seena\\OneDrive\\Desktop\\2022-11-18 20.55.00\\Project csv ETHERIUM Y(2).csv", 2020: "C:\\Users\\seena\\OneDrive\\Desktop\\2022-11-18 20.55.00\\Project csv ETHERIUM Y(3).csv" } def show_year_options(): print("输入'2018'选择2018年数据") print("输入'2019'选择2019年数据") print("输入'2020'选择2020年数据") print("输入'0'退出选择") def select_month(df): """接收DataFrame,处理月份选择逻辑""" while True: try: month = int(input("请输入月份(仅数字,输入0退出):")) if month == 0: break elif 1 <= month <= 12: # 月份转索引:1月对应索引0,以此类推 print(df.loc[month - 1]) else: print("无效选项,请输入1-12之间的数字或0退出") except ValueError: print("请输入有效数字") def select_etherium_data(): show_year_options() while True: try: year_choice = int(input("选择年份:")) if year_choice == 0: break # 通过映射字典获取CSV路径,无需多个if判断 csv_path = YEAR_CSV_MAP.get(year_choice) if csv_path: df = pd.read_csv(csv_path) select_month(df) else: print("无效选项,请输入2018/2019/2020或0退出") except ValueError: print("请输入有效数字") select_etherium_data()
代码优势
- 可维护性:新增年份只需在
YEAR_CSV_MAP里添加键值对,无需修改业务逻辑 - 无重复代码:月份选择逻辑只写一次,无论哪个年份的CSV都复用同一函数
- 输入验证更健壮:捕获非数字输入异常,避免程序崩溃
内容的提问来源于stack exchange,提问作者Athul Tomy
相关产品推荐
相关产品推荐

