当前位置: 移动技术网 > IT编程>脚本编程>Python > pythonABC学习:测试卷小游戏

pythonABC学习:测试卷小游戏

2020年07月07日  | 移动技术网IT编程  | 我要评论

pythonABC学习:测试试卷小游戏

正文

项目题目

素材:我国的省及对应的城市
‘山东’:‘济南’,
‘河北’:‘石家庄’,
‘吉林’:‘长春’,
‘黑龙江’:‘哈尔滨’,
‘辽宁’:‘沈阳’,
‘内蒙古’:‘呼和浩特’,
‘新疆’:‘乌鲁木齐’,
‘甘肃’:‘兰州’,
‘宁夏’:‘银川’,
‘山西’:‘太原’,
‘陕西’:‘西安’,
‘河南’:‘郑州’,
‘安徽’:‘合肥’,
‘江苏’:‘南京’,
‘浙江’:‘杭州’,
‘福建’:‘福州’,
‘广东’:‘广州’,
‘江西’:‘南昌’,
‘海南’:‘海口’,
‘广西’:‘南宁’,
‘贵州’:‘贵阳’,
‘湖南’:‘长沙’,
‘湖北’:‘武汉’,
‘四川’:‘成都’,
‘云南’:‘昆明’,
‘西藏’:‘拉萨’,
‘青海’:‘西宁’,
‘天津’:‘天津’,
‘上海’:‘上海’,
‘重庆’:‘重庆’,
‘北京’:‘北京’,
‘台湾’:‘台北’,
‘香港’:‘香港’,
‘澳门’:‘澳门’
需生成指定数目的试卷,每张卷子题目顺序要不同,答案要全部打乱,而且还需生成对应答案
在这里插入图片描述

使用工具

使用random模块,主要是里面的shuffle与sample命令,还有一些文件操作命令与循环的命令

实现代码

import random
provinces_dict = {
'山东':'济南',
'河北':'石家庄',
'吉林':'长春',
'黑龙江':'哈尔滨',
'辽宁':'沈阳',
'内蒙古':'呼和浩特',
'新疆':'乌鲁木齐',
'甘肃':'兰州',
'宁夏':'银川',
'山西':'太原',
'陕西':'西安',
'河南':'郑州',
'安徽':'合肥',
'江苏':'南京',
'浙江':'杭州',
'福建':'福州',
'广东':'广州',
'江西':'南昌',
'海南':'海口',
'广西':'南宁',
'贵州':'贵阳',
'湖南':'长沙',
'湖北':'武汉',
'四川':'成都',
'云南':'昆明',
'西藏':'拉萨',
'青海':'西宁',
'天津':'天津',
'上海':'上海',
'重庆':'重庆',
'北京':'北京',
'台湾':'台北',
'香港':'香港',
'澳门':'澳门'
}
# print(provinces_dict['广东'])
#请输入你要输出多少份试卷
paperNum = int(input('请输入试卷份数: '))
for papernum in range(paperNum):
    paperfile = open('student_paper{}.txt'.format(papernum+1),'w',encoding='utf-8')
    answerfile = open('student_answer{}.txt'.format(papernum+1),'w',encoding='utf-8')
    paperfile.write('\t姓名:\n')
    paperfile.write('\t班级:\n')
    paperfile.write('\t年龄:\n')
    paperfile.write(' '*20+'各省会测试券\n')
    provinces = list(provinces_dict.keys())
    random.shuffle(provinces)
    for questionNum in range(len(provinces)):
        paperfile.write('{}、 {}的省会是? \n'.format(questionNum+1, provinces[questionNum]))
        correct_answer = provinces_dict[provinces[questionNum]]
        wrong_answer = list(provinces_dict.values())
        wrong_answer.remove(correct_answer)
        wrong_answer = random.sample(wrong_answer,3)
        answer_list = wrong_answer + [correct_answer]
        random.shuffle(answer_list)  #shuffle后不用对象接受
        # print(answer_list[0])
        for selectNum in range(4):
            paperfile.write('{}. {}\n'.format('ABCD'[selectNum] , answer_list[selectNum]))
        paperfile.write('\n')
        answerfile.write('{}、 {}\n'.format(questionNum+1,'ABCD'[answer_list.index(correct_answer)]))
    paperfile.close()
    answerfile.close()

经验总结

  1. 关于random.shuffle(answer_list)中的shuffle使用是不需再用变量接受重排后的列表的
  2. 关于answer_list = wrong_answer + [correct_answer]中需要将correct_answer类型为字符串的转换为列表,再进行列表的加法
  3. 关于’ABCD’[selectNum],可以直接对特定的字符串进行str[num]的操作
  4. 程序完成后要记得close()文件,释放内存

本文地址:https://blog.csdn.net/weixin_43768611/article/details/107140956

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网