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

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))

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
2023年Python编程等级考试一级,是指对于Python编程的初学者而言的入门级别考试。此考试旨在评估考生对Python编程语言的基本语法、数据类型、流程控制以及简单的函数和模块的理解和掌握程度。 考试内容主要包括以下几个方面: 1. Python基本语法:考生需要掌握Python的基础语法,如变量、赋值、表达式、条件语句和循环语句等,以及如何正确使用缩进和冒号等语法规则。 2. 数据类型:考生需要了解Python的各种数据类型,如整数、浮点数、字符串、列表、元组、字典等,并能够使用相应的操作符和内置函数来进行操作。 3. 流程控制:考生需要熟悉Python的条件语句(if-else语句)和循环语句(for循环和while循环),并能够根据实际需求正确运用这些流程控制语句。 4. 函数和模块:考生需要了解函数的定义和调用方法,掌握函数参数的传递方式,并能够编写简单的函数来完成特定的任务。同时,也需要了解模块的概念和使用方法,能够使用内置模块和自定义模块来实现代码的重用和功能拓展。 对于一级考试而言,难度相对较低,适合初学者参加。考生需要通过书籍、教学视频或者在线课程等途径来学习和掌握Python的基本知识和编程技巧。在备考过程,通过大量的练习和实践,掌握各类基础题目的解题思路和方法,加强对概念和语法的理解,提高自己的编程实力。 总之,2023 Python编程等级考试一级是一次对于Python初学者的入门考核,通过此考试,考生能够获得一定的编程基础和能力,并为进一步学习和应用Python打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远的麦田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值