一个简单的考试系统2

160 阅读2分钟

上一节课我们完成了一个简单的考试系统,不过这个考试系统有几个问题,一个是必须预先录入的用户才能参加考试,一个是考试内容永不变,另外还有一个是考试时间没有限制,这次我们将这个完善一下。

1 注册

注册逻辑比登录要略为复杂 1 判断用户名是否在用户名单中,如果在,就提示已经存在 2 用户名通过后要求用户输入两次密码,比较两次密码是否相同,若相同则注册成功,否则重新注册 3 3次注册都不成功,本轮注册失败

逻辑图如下: image.png

代码如下所示:

def register(times):
    import data
    users = data.data["users"]
    for i in range(times):
        user = input("请输入新用户名:")
        if user in users:
            print("{} 已存在,请重新注册".format(user) )
            continue
        pwd1 = input("请输入用户密码:")
        pwd2 = input("请再次输入用户密码:")
        if pwd1 == pwd2:
            users[user] = pwd1
            print("{} 新用户注册成功".format(user))
            return True
        else:
            print("两次输入的密码不一致")
    print("注册失败")
    return False

将注册接入系统

注册完成后需要给用户选择的权力,倒底是注册还是登录,如果是注册,注册完成后再次返回选择界面,如果是登录就检测登录是否成功,不成功就返回选择界面,成功后就进行考试 逻辑图如下所示

image.png 据此逻辑图我们可以将代码修改成如下:

import login
import exam
import register
while True:
    sel = input("请选择功能模块,1表示注册,2表示登录")
    if sel == "1":
        register.register(3)
        continue
    else:
        name = login.login()
        if name:
            exam.exam(name)

增加试题库

原先我们只有一套题,现在我们希望系统可以随机取一套题给到我们,题库原先为 tests=["20*15", "29+35", "13*9"] 我们将之改为

test1 = ["20*15", "29+35", "13*9"]
test2 = ["33+5", "15+60", "19*2"]
test3 = ["18*5", "19-13", "25*7"]

data = {"users": users, "tests": [test1, test2, test3]}

这样,当我们取tests = data["tests"]时,表示的是取一个题库数组, 我们可以用一个随机函数获取这个数组的索引, index = random.randint(0, len(tests)) 然后通过此索引即可获取对应的测试题,代码如下:

import random
def exam(name):
    right = 0
    wrong = 0
    import data
    tests = data.data["tests"]
    index = random.randint(0, len(tests))
    items = tests[index]
    for item in items:
        val = eval(item)
        answer = int(input(item+"="))
        if val == answer:
            right += 1
        else:
            wrong += 1
    print("{}做对了{}题,做错了{}题".
          format(name, right, wrong))