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

Python新手求优化简易加法口算测试代码运行效率的方法

Python代码优化及单列表存储题目答案解决方案

你之前在for循环里手动修改i的值不生效,是因为Python的for循环是迭代range()生成的固定序列,每次循环都会自动从序列中取下一个值覆盖i,你在循环体内修改的i不会影响下一次循环的取值,所以靠这种方式跳过索引的方案行不通。

你当前的代码逻辑比较简单,本身运行效率没有明显瓶颈,主要是写法可以更简洁规范,同时也能实现你把题目和答案存在同一个列表的需求,优化思路如下:

  • 去掉不必要的全局变量,改用函数返回值传递题目、答题计数等数据,避免全局变量被意外修改引发的问题
  • 题目和答案可以成对存在同一个列表的元组中,每个元素格式为(题目字符串, 正确答案整数),遍历的时候直接拆包取值,完全不需要手动处理索引偏移
  • 得分计算直接传入正确题数和总题数即可,不需要依赖全局变量取值

优化后的代码如下:

import random
import string
import time

nums = string.digits

# 生成指定数量的题目,返回包含题目和答案对的列表
def generate_questions(count=10):
    questions = []
    for _ in range(count):
        num0 = random.choice(nums)
        num1 = random.choice(nums)
        q_str = f"{num0}+{num1}"
        correct_ans = int(num0) + int(num1)
        questions.append((q_str, correct_ans))
    return questions

# 主答题逻辑,返回正确题数
def main(questions):
    counter = 0
    for q_str, correct_ans in questions:
        user_ans = int(input(f'What is {q_str}?\n>>'))
        if user_ans == correct_ans:
            print('Correct!')
            counter += 1
        else:
            print('Wrong!')
    return counter

# 计算得分
def calculate_score(correct_count, total_count):
    return f"You got {correct_count / total_count * 100}%"

if __name__ == '__main__':
    questions = generate_questions(10)
    correct_count = main(questions)
    time.sleep(0.5)
    print('Please wait while we calculate your score.')
    time.sleep(1)
    print(calculate_score(correct_count, len(questions)))

改动后所有数据都通过函数参数和返回值传递,没有全局变量风险,同时实现了单列表存储题目和答案的需求,逻辑更清晰,维护起来也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:57:04