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
猜你喜欢
- Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163
- 关于Mysql的触发器,基本上每个Mysql教程里都有讲到,但是我发现那些教程里讲的都是如何处理其他表的数据。在Mysql中写触发器操作本表
- MySQL Innodb 引擎优化,InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoD
- 前言这篇文章主要介绍了Go语言使用swagger生成接口文档的方法,希望能够对大家的学习或工作具有一定的帮助,需要的朋友可以参考下。在前后端
- 本文实例讲述了Python 进程操作之进程间通过队列共享数据,队列Queue。分享给大家供大家参考,具体如下:队列中的数据是放在内存中的,可
- 游戏说明:一个考验您记忆力的游戏,只要两个方块的;图案能够凑成一对,最终翻开所有的图片,那么您就获胜,计算机将自动记录您的游戏时
- 目录一、环境准备二、问题分析三、spider四、item五、setting六、pipelines七、middlewares八、使用jupyt
- python爬虫学习之定向爬取淘宝商品价格,供大家参考,具体内容如下import requestsimport redef getHTMLT
- 前言.net core来势已不可阻挡。既然挡不了,那我们就顺应它。了解它并学习它。今天我们就来看看和之前.net版本的配置文件读取方式有何异
- 可能各位朋友看到这个标题很不解,到底什么是习惯化,什么又是去习惯化?下面我来慢慢介绍我的个人理论。习惯化:随着对刺激的熟悉,人们越来越注意不
- 关于“登录”和“注册”的问题已经被很多设计师和交互设计上写过无数遍了,今天我在登录纳米盘网站时受到打击了所以写下此文。事情是这样的:当初租用
- 本文实例讲述了thinkPHP5.0框架简单配置作用域的方法。分享给大家供大家参考,具体如下:配置参数支持作用域的概念,默认情况下,所有参数
- 函数嵌套,这个名字有点纠结,也许不太好理解。一个比较常见的函数嵌套特例:递归函数,即函数自己嵌套自己。 一直以为在PHP中不能有太多的函数嵌
- 占位符通过占位符,可以指定格式进行输入或输出,以下为 fmt 标准库里的占位符:普通占位符占位符描述举例结果%v默认格式的值fmt.Prin
- 安装paramiko后,看下面例子:import paramiko#设置ssh连接的远程主机地址和端口t=paramiko.Transpor
- 最近人工智能等多门课需要复现论文,近两年的论文很多都是基于Pytorch环境做的实验,所以,这里总结一下Pytorch的安装教程,做好最快、
- 本文实例讲述了Python素数检测的方法。分享给大家供大家参考。具体如下:该程序实现了素数检测器功能,如果结果是true,则是素数,如果结果
- 这些CSS Selector在平时写页面的时候用地不多,只在JavaScript库、Firefox插件、iPhone页面里有过接触。推荐大家
- (一) 常用的CSS命名规则:头:header内容:content/container尾:footer导航:nav侧栏:sidebar栏目:
- 这个弹出层的登录界面挺好看,很清爽所以转了过来给大家分享,要实现这个功能很简单:首先设计一个登录界面,使用css中的display=&quo