上一节课我们完成了一个简单的考试系统,不过这个考试系统有几个问题,一个是必须预先录入的用户才能参加考试,一个是考试内容永不变,另外还有一个是考试时间没有限制,这次我们将这个完善一下。
1 注册
注册逻辑比登录要略为复杂 1 判断用户名是否在用户名单中,如果在,就提示已经存在 2 用户名通过后要求用户输入两次密码,比较两次密码是否相同,若相同则注册成功,否则重新注册 3 3次注册都不成功,本轮注册失败
逻辑图如下:
代码如下所示:
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
将注册接入系统
注册完成后需要给用户选择的权力,倒底是注册还是登录,如果是注册,注册完成后再次返回选择界面,如果是登录就检测登录是否成功,不成功就返回选择界面,成功后就进行考试 逻辑图如下所示
据此逻辑图我们可以将代码修改成如下:
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))