欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

pythonABC学习:测试卷小游戏

程序员文章站 2024-01-09 16:30:46
pythonABC学习:测试试卷小游戏正文项目题目使用工具实现代码经验总结正文项目题目素材:我国的省及对应的城市‘山东’:‘济南’,‘河北’:‘石家庄’,‘吉林’:‘长春’,‘黑龙江’:‘哈尔滨’,‘辽宁’:‘沈阳’,‘内蒙古’:‘呼和浩特’,‘*’:‘乌鲁木齐’,‘甘肃’:‘兰州’,‘宁夏’:‘银川’,‘山西’:‘太原’,‘陕西’:‘西安’,‘河南’:‘郑州’,‘安徽’:‘合肥’,‘江苏’:‘南京’,‘浙江’:‘杭州’,‘福建’:‘福州’,‘广东’:‘广州’,‘...

pythonABC学习:测试试卷小游戏

正文

项目题目

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