使用Pandas对CSV生成的DataFrame随机迭代并实现正误判断
基于Pandas DataFrame实现随机问答测验
1. 读取CSV文件生成目标DataFrame
先确保pyquiz.csv的列名与目标结构完全匹配(variables、statements、True of False),再用Pandas读取:
import pandas as pd # 读取CSV生成DataFrame df = pd.read_csv('pyquiz.csv') # 可选:打印验证结构 print(df)
如果需要手动构造示例DataFrame用于测试,可直接使用:
df = pd.DataFrame({ 'variables': ['f1', 'f2', 'f3', 'f20'], 'statements': ['f_state1', 'true_state1', 'f_state2', 'f_state20'], 'True of False': ['F', 'T', 'F', 'F'] })
2. 随机迭代DataFrame
通过sample(frac=1)打乱DataFrame的行顺序,实现随机遍历:
import random # 打乱行顺序,每次运行生成不同随机序列 shuffled_df = df.sample(frac=1, random_state=random.randint(1, 1000))
3. 实现问答逻辑
遍历打乱后的DataFrame,根据True of False列的正确答案判断用户输入,给出对应反馈:
user_start = input("输入'pyquiz'开始测验: ") if user_start == 'pyquiz': for _, row in shuffled_df.iterrows(): current_statement = row['statements'] correct_ans = row['True of False'] print(f"\n{current_statement}") user_ans = input("输入T或F: ").strip().upper() if user_ans == correct_ans: print("正确!") input("\n按回车继续: ") else: print("错误。")
逻辑说明
- 用
sample(frac=1)替代原列表的sorted(..., key=lambda _: random.random()),更贴合Pandas的操作习惯 - 直接从每行获取陈述和正确答案,无需额外维护
true_statements和false_statements两个列表 - 对用户输入做了大写转换,避免大小写敏感导致的误判
- 正确后等待用户回车再进入下一题,错误则直接提示后自动跳转
内容的提问来源于stack exchange,提问作者jricks72
相关产品推荐
相关产品推荐

