python中列表和字典的应用-重写一个简单的考试系统

280 阅读2分钟

1、一个考试系统首先需要预先存储用户信息,以供用户登录时验证,另外还需要试题库,以便用户进行试题测试。 用户信息可以用一个简单的字典生成:

users = {"houxiang": "123456",
         "decheng": "123456",
         "junze": "123456",
         "yangyang": "123456",
         "zhuogan": "123456",
         "jiashun": "123456"}

试题库用列表生成:

tests = ["13*5", "16*7", "28*9"]

最后我们将这两个变量放置在一个大字典中,做成一个数据集,以便给到后面的程序使用

data = {"users": users, "tests": tests}

2、登录 考试系统用户只有登录才记录成绩,因此需要写一个登录函数,这个函数需要接收用户名和密码,然后判断用户名是否在系统中有存储,如果在系统中有存储的话还需要判断对应的密码与用户输入的是否一致,如果都满足,返回True,否则返回False,逻辑如下所示:

image.png

根据此图可形成如下代码:

def login():
    name = input("请输入用户名: ")
    pwd = input("请输入密码: ")
    users = data.data["users"]
    if name in users and users[name] == pwd:
        print("欢迎{}".format(name))
        return name
    else:
        print("用户名或密码错误!!!")
        return ""

3、考试 登录完成后就可以考试了,考试的方法是从试题库中取出一个题库列表,然后循环取出其中的试题,计算试题的答案,获取用户的答案,将两个答案相比较,相同的话right计数加1,不相同wrong计数加1,for循环完毕后输出用户成绩 逻辑图如下:

image.png

根据此逻辑图,可写出考试的函数:

import data

def exam(name):
    right = 0
    error = 0
    tests = data.data["tests"]
    for item in tests:
        val = eval(item)
        answer = int(input(item+"="))
        if answer == val:
            right += 1
        else:
            error += 1
    print("user: {}, right: {}, error: {}".format(name, right, error))

4、整合 调用登录程序,可以尝试三次,失败程序退出,成功的话调用考试的函数,然后程序退出 逻辑如下:

image.png 对应的代码如下:

import exam
import login

name = ""
for i in range(3):
    name = login.login()
    if name:
        exam.exam(name)
        exit(0)

print("程序退出")

最后附上所有的代码

data.py

users = {"houxiang": "123456",
         "decheng": "123456",
         "junze": "123456",
         "yangyang": "123456",
         "zhuogan": "123456",
         "jiashun": "123456"}
tests = ["13*5", "16*7", "28*9"]

data = {"users": users, "tests": tests}

login.py

import data


def login():
    name = input("请输入用户名: ")
    pwd = input("请输入密码: ")
    users = data.data["users"]
    if name in users and users[name] == pwd:
        print("欢迎{}".format(name))
        return name
    else:
        print("用户名或密码错误!!!")
        return ""

exam.py

import data


def exam(name):
    right = 0
    error = 0
    tests = data.data["tests"]
    for item in tests:
        answer = int(input(item+"="))
        val = eval(item)
        if answer == val:
            right += 1
        else:
            error += 1
    print("user: {}, right: {}, error: {}".format(name, right, error))

main.py

import exam
import login

name = ""
for i in range(3):
    name = login.login()
    if name:
        exam.exam(name)
        exit(0)

print("程序退出")