Python使用列表和字典实现简单的考试系统详解
作者:永远的麦田
1 之前我们学习了列表,知道列表可以用来存储一组数据,可以增删改查,可以遍历
2 之前我们学习了字典,知道字典可以用来存储键值对,与列表类似,字典也可以进行增删改查,同样也可以遍历
这节课我们利用学到的这两种类型的数据结构做一个练习
需求
一个简单的考试系统:
这个系统有以下几个部分:
1)使用系统需要先登录,只有输入正确的用户名和密码才能进入,用户试错3次后系统退出
2)登录成功后,可以参加考试,试题内容是原先存储在机算机中的内容。
3)考试结束后会输出用户名和考试分数
分析
考试系统需要两样数据,一是用户信息,另一个是考试的题库
我们可以做简单一些,将所有用户的信息作为字典的值,用users表示字典的key,类似这样
"users": {"decheng": "123456", "zhuogan": "123456", "yangyang": "123456", "jiashun": "123456", "junze": "123456"}
然后将测试题作为字典的另一个值,用tests作为字典的key,如下:
"tests": ["36+5", "4+17", "13*9"]
字典的key值和value都想好了,我们直接把这个字典定义出来:
data = { "users": {"decheng": "123456", "zhuogan": "123456", "yangyang": "123456", "jiashun": "123456", "junze": "123456"}, "tests": ["36+5", "4+17", "13*9"] }
实现
1登录
用户的登录比较简单,我们可以给用户设定一个试错次数,比如3次,当用户3次都输不对用户名和密码时,系统给出提示并退出,如果输入用户名和密码可以和之前的配置中的字典对应上,则提示用户将进行测试。
代码也比较简单
def login(): for i in range(3): name = input("please input your name: ") pwd = input("please input your passwd: ") if name in data["users"] and data["users"][name] == pwd: print("{} will test......".format(name)) return name else: print("username or passwd error!!!") print("system will exit......") return ""
如果用户登录成功,返回用户名,否则返回一个空字符串
2考试
做练习题这儿牵涉到一个非常重要的函数eval(),用来将表达式计算出来,比如"3+5"通过调用eval("3+5")我们可以知道这个表达式等于8
这样只需通过eval("3+5") == answer即可知道用户是否回答正确
代码如下:
def test(): right = 0 error = 0 for item in data["tests"]: answer = input(item + "=") if int(answer) == eval(item): right += 1 else: error += 1 return error, right
程序先设定两个计数器,每做对一题right加1,每错一题,error加1
测试开始,程序遍历数组data["tests"]中的表达式,并将表达式计算出来的值与用户输入的答案比较,若相等则right加1,不想等error加1,当数组遍历完成,程序退出,返回做题正确数和错误数
3将整个系统串起来
整个系统分3部分,登录,考试,打印考试结果
有一点我们要注意,如果用户3次都没有登录成功,login()返回空字符串,系统需要退出,不能再进行考试。串起来的代码更简单,如下所示:
user_name = login() if user_name: error, right = test() print("用户{}参加测试,一共{}道题,做对{}题,做错{}题".format(user_name, len(data["tests"]), right, error))
最后附上全部代码:
# -*- coding: utf-8 -*- """ funcs: 列表和字典的应用 考试系统: 1 用户登录,用户名,密码正确可登录 2 配置练习题 3 循环展示,等待用户输入答案 4 计算预期答案,给出评分 """ data = { "users": {"decheng": "123456", "zhuogan": "123456", "yangyang": "123456", "jiashun": "123456", "junze": "123456"}, "tests": ["36+5", "4+17", "13*9"] } def login(): for i in range(3): name = input("please input your name: ") pwd = input("please input your passwd: ") if name in data["users"] and data["users"][name] == pwd: print("{} will test......".format(name)) return name else: print("username or passwd error!!!") print("system will exit......") return "" def test(): right = 0 error = 0 for item in data["tests"]: answer = input(item + "=") if int(answer) == eval(item): right += 1 else: error += 1 return error, right user_name = login() if user_name: error, right = test() print("用户{}参加测试,一共{}道题,做对{}题,做错{}题".format(user_name, len(data["tests"]), right, error))
到此这篇关于Python使用列表和字典实现简单的考试系统详解的文章就介绍到这了,更多相关Python考试系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!