Python使用列表和字典实现简单的考试系统详解
作者:永远的麦田 发布时间:2023-11-07 11:14:53
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))
来源:https://blog.csdn.net/luhouxiang/article/details/125108381
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 这个工具是使用Python开发,可以从下面地址了解详情。官网: https://pypi.org/project/webssh/webssh
- 前情提要上文我们分析了挂载组件主要调用了三个函数: createComponentInstance(创建组件实例)、setupCompone
- 为什么我也要说SQL Server的并行:这几天园子里写关于SQL Server并行的文章很多,不管怎么样,都让人对并行操作有了更深刻的认识
- 本文实例讲述了Python标准库shutil用法。分享给大家供大家参考,具体如下:shutil模块提供了许多关于文件和文件集合的高级操作,特
- 浏览器的具体功能都储存在服务器端的Browscap.ini中:<% SET
- 说明:关于类的这部分,我参考了《Learning Python》一书的讲解。创建类创建类的方法比较简单,如下:class Person:&n
- 在开始做mysql分页功能组件前,便设定的是要有一定可复用性。先在项目里Views文件夹下右键新建名为_PaginationComponen
- MySQL安全性指南(3) 作 者: 晏子2.4 不用GRANT设置用户如果你有一个早于3.22.11的MySQL版本,你不能使用GRANT
- 本文实例讲述了gearman+mysql方式实现持久化操作。分享给大家供大家参考,具体如下:1、为什么要持久化?gearman的job se
- SpringBoot体系内推荐使用Thymeleaf作为前端页面模板。jsp还得自己整合一下。1.项目结构对比以前的项目结构,main目录下
- 今天我们分享的主要目的就是通过在 Python 中使用命令行和配置文件来提高代码的效率Let's go!我们以机器学习当中的调参过程
- 时间对象(Date())比较简单,本文旨在为初学者入门使用,大牛可略过!本文承接基础知识实例,说一下实例的要求:在页面中输出当前客户端时间(
- 前言之前一直写不出来,这周周日花了一下午终于弄懂了, 顺便放博客里,方便以后忘记了再看看。 要实现的是输入一张 图,起点,终点,输出起点和终
- 很多时候我们需要对数字进行格式化,比如位数不足前面加0补足。用PHP可以很轻易实现,因为PHP自带了相关功能的函数。<?php &nb
- 对于js中eval()函数的理解和写一个函数trim()去掉字符串左右空格。 trim()是参照了jquery的源码,你可以放心使用。 对于
- 1,flask中内置的过滤器模板中常用方法:{#过滤器调用方式{{变量|过滤器名称}} #} <!-- safe过滤器,可
- 相关推荐:完整的sql中文参考手册(chm)下载 DB2 提供了关连式资料库的查询语言 sql (Structured Query
- 最近新需求来了,要给系统增加几个资源权限。尽量减少代码的改动和程序的复杂程度。所以还是使用装饰器比较科学之前用了一些登录验证的现成装饰器模块
- 本文实例讲述了JavaScript实现隐藏省略文字效果的方法。分享给大家供大家参考,具体如下:<html> <
- MySQL是一个多线程的,结构化查询语言(SQL)数据库服务器。SQL在世界上是最流行的数据库语言。MySQL的执行性能非常高,运行速度非常