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 nameelse: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 = 0error = 0for item in data["tests"]:answer = input(item + "=")if int(answer) == eval(item):right += 1else:error += 1return 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 nameelse:print("username or passwd error!!!")print("system will exit......")return ""def test():right = 0error = 0for item in data["tests"]:answer = input(item + "=")if int(answer) == eval(item):right += 1else:error += 1return error, rightuser_name = login()
if user_name:error, right = test()print("用户{}参加测试,一共{}道题,做对{}题,做错{}题".format(user_name, len(data["tests"]), right, error))

python中列表和字典的应用-一个简单的考试系统相关推荐

  1. Python:结合列表和字典,编写一个简单的学生成绩管理系统

            本次主要使用新学的列表和字典,结合定义函数等知识点,成功编写了一个简单的学生成绩管理系统.实现了在系统内使用学生的姓名或者学号,即可实现显示.添加.删除.修改.查找(增删改查).成绩排 ...

  2. python中列表 元组 字典 集合的区别

    参考文章:python中列表 元组 字典 集合的区别

  3. 用Java实现一个简单的考试系统

    用Java实现一个简单的考试系统 需求分析 设计思路 编码实现 需求分析 该考试系统可以实现的功能和系统要求应该包括: 学生:登录.考试.考试后查看成绩 老师:出题目(往题库中添加新题目).批阅卷子( ...

  4. python中列表、字典和集合推导式

    1. 列表推导式         ⽤⼀个表达式创建⼀个有规律的列表或控制⼀个有规律列表,又叫列表生成式. 1.1 简单的列表推导式 需求:创建⼀个0-10的列表. 示例代码:[while循环实现] # ...

  5. python中列表嵌套字典/列表排序,字典排序,列表排序。

    列表排序 列表嵌套字典/列表排序 使用 lambda # 列表内多层嵌套,字典和列表 list_num = [{'name': '中国', 'uid': 10003, 'extinfo': {'tie ...

  6. python中列表、字典、元组、字符串对应的操作大全

    1.列表 2.字典 3.元组 4.字符串 1)字符串判断 2)查找和替换 3)拆分和连接 4)大小写转换 5)文本对齐 6)去除空白字符

  7. 用python selenium实现一个简单的考试系统的自动做题

    xuefa考试,很实用的东西,不需要废话,直接上代码: # encoding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') f ...

  8. python中列表字典和字符串的相互转化

    python中列表字典和字符串的相互转化有两种方法: (1)使用str和eval的方法,一个简单的例子如下: data = {'name' : 'ACME','shares' : 100,'price ...

  9. python如何创建一个列表_使用python中的format()创建一个列表(make a list using format() in python)...

    使用python中的format()创建一个列表(make a list using format() in python) 我是python和编码的新手. 因此,如果已经讨论过这件事,我很抱歉,我无 ...

最新文章

  1. 清华团队将Transformer用到3D点云分割上后,效果好极了
  2. python自动化发送邮件_python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解)...
  3. 被遗忘的Logrotate
  4. 多线程,你觉得你安全了?(线程安全问题)
  5. Linux命令:dd、iostat、sar
  6. Linux下的、1、2、2>1、dev/null黑洞文件
  7. php用户注册重复_php 验证用户名重复
  8. 【计算机网络】ISO/OSI模型
  9. Leetcode 1109.航班预定统计 差分
  10. Android-构建不同环境的Apk
  11. 外贸建站前必做的SEO优化?
  12. POJ#1182 食物链
  13. 本html添加可信站点,js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序...
  14. ARM平台AMBA总线uart驱动和console初始化
  15. springboot日志写入mysql_springboot运用logback将日志写入数据库
  16. 成人python培训_B2B优选:成人编程爱好者学习
  17. mysql嵌套查询语句
  18. c语言顺时针打印数组,顺时针打印数组
  19. 医疗知识图谱问答系统探究(一)
  20. linux下inet_addr函数,Linux下两个网络函数inet_addr和inet_network (2008-09-01 01:42)

热门文章

  1. MD毛豆新发现--友链平台
  2. 软件测评师2012年下半年考试真题
  3. 删除过期provisioning profile文件
  4. 浅谈PLC通信中的TCPIP的连接和断开
  5. spring boot使用AbstractRoutingDataSource实现动态数据源切换
  6. Android开发——自动连接指定SSID的wifi热点(不加密/加密)
  7. QFP PQFP LQFP TQFP封装形式及PCB详解
  8. 第一性原理计算前进行VESTA建模
  9. day5 循环关键字
  10. BCM设计与开发的简单介绍