大数跨境
0
0

一个案例轻松认识Python字典-成绩达标判定

一个案例轻松认识Python字典-成绩达标判定 Social Companion
2020-12-19
0
导读:判断学生成绩是否达标的程序要求输入学生数量,以及各个学生物理、数学、历史三科的成绩,如果总成绩小于 120,

判断学生成绩是否达标的程序
要求输入学生数量,以及各个学生物理、数学、历史三科的成绩,如果总成绩小于 120,程序打印 “不达标!”,否则打印 “达标了!”。

一、Dictionary(字典)

字典是是无序的键值对(key:value)集合,同一个字典内的键必须是互不相同的。

一对大括号 {} 创建一个空字典。

初始化字典时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。

我们使用键来检索存储在字典中的数据。

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号:分割,每个对之间用逗号(,)分割,整个字典包括在花括号 { } 中 ,格式如下所示:

 d = {key1 : value1, key2 : value2, key3 : value3 }

举例:

>>> data = {'kushal':'Fedora''kart_':'Debian'
'Jace':'Mac'}
>>> data
{'kushal''Fedora''Jace''Mac''kart_''Debian'}
>>> data['kart_']
'Debian'
1、创建新的键值对
>>> data['parthan'] = 'Ubuntu'
>>> data
{'kushal''Fedora''Jace''Mac''kart_''Debian'
'parthan''Ubuntu'}
2、del 关键字删除任意指定的键值对:
>>> del data['kushal']
>>> data
{'Jace''Mac''kart_''Debian''parthan''Ubuntu'
3、in 关键字查询指定的键是否存在于字典中。
>>> 'ShiYanLou' in data
False

必须知道的是,字典中的键必须是不可变类型,比如不能使用列表作为键。

4、dict() 可以从包含键值对的元组中创建字典。
>>> dict((('Indian','Delhi'),('Bangladesh','Dhaka')))
{'Indian''Delhi''Bangladesh''Dhaka'}
5、遍历一个字典,使用字典的 items() 方法。
>>> data
{'Kushal''Fedora''Jace''Mac''kart_''Debian''parthan''Ubuntu'}
>>> for x, y in data.items():
...     print("{} uses {}".format(x, y))
...
Kushal uses Fedora
Jace uses Mac
kart_ uses Debian
parthan uses Ubuntu

许多时候我们需要往字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值。如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能。

可以使用 dict.setdefault(key, default) 更有效率的完成这个事情。

>>> data = {}
>>> data.setdefault('names', []).append('Ruby')
>>> data
{'names': ['Ruby']}
>>> data.setdefault('names', []).append('Python')
>>> data
{'names': ['Ruby''Python']}
>>> data.setdefault('names', []).append('C')
>>> data
{'names': ['Ruby''Python''C']}

试图索引一个不存在的键将会抛出一个 keyError 错误。我们可以使用 dict.get(key, default) 来索引键,如果键不存在,那么返回指定的 default 值。

>>> data['foo']
Traceback (most recent call last):
File "<stdin>", line 1in <module>
KeyError: 'foo'
>>> data.get('foo'0)
0
6、遍历列表(或任何序列类型)的同时获得元素索引值,用 enumerate()。
>>> for i, j in enumerate(['a''b''c']):
...     print(i, j)
...
0 a
1 b
2 c
7、同时遍历两个序列类型,用 zip() 函数。
>>> a = ['Pradeepto''Kushal']
>>> b = ['OpenSUSE''Fedora']
>>> for x, y in zip(a, b):
...     print("{} uses {}".format(x, y))
...
Pradeepto uses OpenSUSE
Kushal uses Fedora

二、程序示例

要求输入学生数量,以及各个学生物理、数学、历史三科的成绩,如果总成绩小于 120,程序打印 “不达标!”,否则打印 “达标了!

n = int(input("输入学生人数: "))
data = {} # 用来存储姓名和成绩的字典变量
kemu = ('yuwen''shuxue''yingyu') # 所有科目
for i in range(0, n):
    name = input('输入学生姓名 {}: '.format(i + 1)) # 输入姓名
    chengji = []
    for x in kemu:
        chengji.append(int(input('输入各科成绩 {}: '.format(x)))) # 输入各科分数
    data[name] = chengji #生成成绩字典
for x, y in data.items(): #遍历字典并计算
    zongfen = sum(y)
    print("{}的总分 {}".format(x, zongfen))
    if zongfen < 120:
        print(x, "不达标!")
    else:
        print(x, "达标了!")

data 是个字典,字典的键值对中,键指的是 name 的值,值指的是 chengji 的值。因此会使用 data[name] = chengji 将学生数据存入到 data 字典。

最后通过 for 循环遍历字典,x 为学生的 name,y 为学生成绩列表 chengji,sum() 函数会将传入的列表进行加和。

References

[1]实验楼:https://www.lanqiao.cn/courses/596

温馨提示:

* 本号内容为教育学习使用,软件、知识更新等,请以实际为准;
* 本文部分文字、图片均来源于网络,如有侵权,请联系删除。
【声明】内容源于网络
0
0
Social Companion
信息科技教学,个人思考随感的在线记事本
内容 791
粉丝 0
Social Companion 信息科技教学,个人思考随感的在线记事本
总阅读12
粉丝0
内容791