判断学生成绩是否达标的程序
要求输入学生数量,以及各个学生物理、数学、历史三科的成绩,如果总成绩小于 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 1, in <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

温馨提示:

