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

如何修复pylint的‘too many statements’错误?附代码优化需求

解决Python代码触发pylint 'too many statements'错误的精简方案

问题背景

你这段单函数内的多分支代码可正常运行,但因函数内语句数量过多,触发了pylint的too many statements错误。下面是针对该问题的重构方案,既符合大学作业规范,又能消除pylint报错。

原代码片段

selection = input("输入1、2、3、4或5开始:\n")

if selection == "1":
    print("\n你选择了'"+question_data[0][0]+"',开始答题!")

    for key in science:
        print("--------------------------------------------------------\n")
        print(key)
        for i in science_choices[num_question-1]:
            print("")
            print(i)

        choice = input("输入你的答案(A、B或C):\n").upper()
        answers.append(choice)

        correct_answers += check_correct_answer(science.get(key), choice)
        num_question += 1

    player_score(correct_answers, answers)

elif selection == "2":
    ...................................................

elif selection == "3":
    ...................................................

elif selection == "4":
    ...................................................

elif selection == "5":
    ...................................................

else:
    print("\n输入无效,请重试。\n")
    start_new_quiz()

重构方案

核心思路是将每个选项的业务逻辑提取为独立函数,再用字典映射选项到对应函数,替代冗长的if-elif链,大幅减少主函数内的语句数量。

步骤1:提取分支逻辑为独立函数

把每个选项对应的答题逻辑拆成单独的函数,示例如下:

def run_science_quiz(answers, correct_answers, num_question):
    print(f"\n你选择了'{question_data[0][0]}',开始答题!")
    for key in science:
        print("--------------------------------------------------------\n")
        print(key)
        for i in science_choices[num_question-1]:
            print("\n" + i)
        choice = input("输入你的答案(A、B或C):\n").upper()
        answers.append(choice)
        correct_answers += check_correct_answer(science.get(key), choice)
        num_question += 1
    player_score(correct_answers, answers)
    return answers, correct_answers, num_question

# 同理为选项2-5创建对应的函数
def run_history_quiz(answers, correct_answers, num_question):
    # 这里写选项2的逻辑
    pass

def run_literature_quiz(answers, correct_answers, num_question):
    # 这里写选项3的逻辑
    pass

def run_math_quiz(answers, correct_answers, num_question):
    # 这里写选项4的逻辑
    pass

def run_geography_quiz(answers, correct_answers, num_question):
    # 这里写选项5的逻辑
    pass

步骤2:用字典映射选项与函数

在主函数中用字典替代if-elif链,简化逻辑:

def main_quiz_logic():
    selection = input("输入1、2、3、4或5开始:\n")
    
    # 建立选项到处理函数的映射
    quiz_handlers = {
        "1": run_science_quiz,
        "2": run_history_quiz,
        "3": run_literature_quiz,
        "4": run_math_quiz,
        "5": run_geography_quiz
    }
    
    # 获取对应的处理函数,处理无效输入
    handler = quiz_handlers.get(selection)
    if handler:
        # 传入需要维护的状态变量(根据实际需求调整)
        answers, correct_answers, num_question = handler(answers, correct_answers, num_question)
    else:
        print("\n输入无效,请重试。\n")
        start_new_quiz()

方案优势

  • 消除pylint的too many statements错误,主函数内语句数大幅减少
  • 每个函数职责单一,代码结构更清晰,便于后续维护和修改
  • 新增选项时只需添加对应函数和字典映射,扩展性更强

内容的提问来源于stack exchange,提问作者T-M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:50:20