一道试题中备选答案打乱顺序,随机展示,用数组实现

    今天遇到一个写一个测试题的小项目,测试题是从数据库(试题库)随机抽取的。现在的小需求是,在拿到这道试题之后,备选答案随机展示。

    比如这里title是标题,answer01、answer02、answer03、answer04是四个备选项,tureanswer是正确选项的索引,此时就表示第一个属于正确答案。

    如果打乱选项顺序,思路是选用数组,将这个四个选项取出来,组成一个数组,找到正确答案,用新定义的变量展示出来。

<?php
header("Content-Type:text/html;charset=utf-8");
//定义一组数组,作为备选项
$select = array("我是A选项", "我是B选项", "我是C选项", "我是D选项" );
//定义第三个是正确答案,我是C选项
$true_no = 3;
//正确答案
$true = $select[$true_no-1];
//打乱顺序之前的数组
var_dump($select);
//输出正确的选项(预定义)
var_dump($select[$true_no-1]);
//打乱顺序,用PHP自带的shuffle函数
shuffle($select);
//检测是否已经打乱
var_dump($select);
//找到正确答案在数组的位置
$locationNum = array_search($true,$select);
var_dump($locationNum);
//检查正确答案
var_dump($select[$locationNum]);
?>
    此时就是打乱之后的备选项了。
    

 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
答案,并得到本次测试的得分和正确率。 二、实现思路: 1. 文件保存试题库。可以使用csv文件格式,每行记录一道试题,包括题干、4个备选答案、标准答案,用逗号分隔。 2. 试题录入。可以通过程序提示用户输入题干、备选答案和标准答案,将数据保存到csv文件。 3. 试题抽取。可以使用random模块的sample函数实现从csv文件随机抽取N道题。 4. 答题。程序随机抽取N道题并显示给用户,用户输入答案后,程序计算出得分和正确率。 三、代码实现: 1. 文件保存试题库: ```python import csv # 将试题保存到csv文件 def save_question(question): with open('question.csv', 'a', newline='') as f: writer = csv.writer(f) writer.writerow(question) ``` 2. 试题录入: ```python # 录入试题 def input_question(): question = [] question.append(input('请输入题干:')) for i in range(4): question.append(input('请输入备选答案{}:'.format(i+1))) question.append(input('请输入标准答案:')) save_question(question) ``` 3. 试题抽取: ```python import random # 从csv文件抽取N道题 def get_questions(n): questions = [] with open('question.csv', 'r') as f: reader = csv.reader(f) for row in reader: questions.append(row) return random.sample(questions, n) ``` 4. 答题: ```python # 答题 def answer_questions(): n = int(input('请输入题目数量:')) questions = get_questions(n) score = 0 for q in questions: print(q[0]) for i in range(4): print('{}、{}'.format(i+1, q[i+1])) answer = input('请输入答案编号:') if answer == q[5]: score += 1 print('得分:{},正确率:{}'.format(score, score/n)) ``` 四、完整代码: ```python import csv import random # 将试题保存到csv文件 def save_question(question): with open('question.csv', 'a', newline='') as f: writer = csv.writer(f) writer.writerow(question) # 录入试题 def input_question(): question = [] question.append(input('请输入题干:')) for i in range(4): question.append(input('请输入备选答案{}:'.format(i+1))) question.append(input('请输入标准答案:')) save_question(question) # 从csv文件抽取N道题 def get_questions(n): questions = [] with open('question.csv', 'r') as f: reader = csv.reader(f) for row in reader: questions.append(row) return random.sample(questions, n) # 答题 def answer_questions(): n = int(input('请输入题目数量:')) questions = get_questions(n) score = 0 for q in questions: print(q[0]) for i in range(4): print('{}、{}'.format(i+1, q[i+1])) answer = input('请输入答案编号:') if answer == q[5]: score += 1 print('得分:{},正确率:{}'.format(score, score/n)) # 主程序 def main(): while True: print('1. 录入试题') print('2. 答题') print('3. 退出') choice = input('请选择操作:') if choice == '1': input_question() elif choice == '2': answer_questions() elif choice == '3': break else: print('无效操作,请重新选择!') if __name__ == '__main__': main() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值