大爽Python入门公开课教案

点击查看教程总目录

本文偏难。

推荐等第一二三四章上完后,回过来拓展阅读。

基础情景思考

假设有这样一张成绩表

最左边的一列是名字,起名麻烦。

这里直接用ABC...来代替。

language math english
A 90 80 85
B 80 87 86
C 85 90 90
  1. 使用怎样的容器可以存储这张表中的的数据信息。

    (开放题,答案不唯一)
  2. 使用1中容器,如何根据人名得到其详细信息。

    具体来讲,有变量name值为人名(可以取一个名字做示例值,比如A),怎么使用name变量,找到对应的具体成绩信息。(代码不能写死,name变量值变了也应该能生效)

详细信息以以下格式输出

name: A, language: 90, math: 80, english: 85.
  1. 怎么添加一行学生信息。比如下面这一行
language math english
D 80 85 85
  1. 怎么使用容器,以如下格式输出所有人成绩信息。
A: language=90, math=80, english=85, sum=255.

提示,sum(sequence)方法可以得到sequence所有元素的和。

基础实现

主要使用列表

选择列表作为容器的主要实现方式

使用列表作为容器的主要实现方式,其对应的实现方法也有很多种,以下只是一种示例。

  1. 将每行信息看作一组,使用元组来存储每行的信息,再用列表来存储所有行。(这里选择不存储科目信息)

    代码如下
scores = [
("A", 90, 80, 85),
("B", 80, 87, 86),
("C", 85, 90, 90)
]
  1. 使用for循环遍历查找name值,代码如下
name = "A"
for item in scores:
item_name = item[0]
if item_name == name:
print("name: %s, language: %s, math: %s, english: %s." % item)
  1. 代码如下
d_item = ("D", 80, 85, 85)
scores.append(d_item)
  1. 代码如下
for item in scores:
name, s1, s2, s3 = item
s = s1 + s2 + s3
print("%s: language=%s, math=%s, english=%s, sum=%s." %
(name, s1, s2, s3, s))

主要使用字典

选择字典作为容器的主要实现方式

使用字典作为容器的主要实现方式,其对应的实现方法也有很多种,以下只是一种示例。

  1. 将每行的学生名字作为键,成绩信息放在元组中,用该元组作为值。(这里选择不存储科目信息)

    代码如下
scores = {
"A": (90, 80, 85),
"B": (80, 87, 86),
"C": (85, 90, 90)
}
  1. 代码如下
name = "A"
score_a = scores[name]
print("name: %s, language: %s, math: %s, english: %s." %
(name, score_a[0], score_a[1], score_a[2]))
  1. 代码如下
scores["D"] = (80, 85, 85)
  1. 代码如下
for name in scores:
s1, s2, s3 = scores[name]
s = s1 + s2 + s3
print("%s: language=%s, math=%s, english=%s, sum=%s." %
(name, s1, s2, s3, s))

拓展情景思考

考虑以下两个需求,思考原有容器应该如何调整结构(或者说重新设计),

调整后的容器如何实现234。

(其中2和4输出时,只输出学生选择的课程的信息。)

  1. 如果有一个新的科目,比如sports,如何添加这个新的科目的成绩信息到容器中。

    该科目成绩是已知的,值如下。
sports
A 85
B 90
C 85
D 85
  1. 如果每个人后面可以从几门课中选一门课程来上并获得分数。又该如何添加?

    选课和对应成绩如下(其中-代表没有选择这个课程)
music art science
A - - 90
B 90 - -
C - 95 -
D - - 85

思考分析:

  • 原来的课程名称信息是在输出代码中写死的,这里需要调整,写到容器变量中。
  • 原来每个人的课程分数都是保存再元组中,不能修改,

    这里要使用可以修改的容器,以便添加成绩。
  • 没有选择的课程,其成绩该如何表示。

拓展实现

主要使用列表

  1. 实现1, 5, 6, 代码如下
# 1
# 用一个专门的列表存储科目信息
courses = ["language", "math", "english"] # 仍然将每行信息看作一组,但使用可变的列表来存储每行的信息
scores = [
["A", 90, 80, 85],
["B", 80, 87, 86],
["C", 85, 90, 90]
] # 5
courses.append("sports")
sports_scores = (85, 90, 85)
for i in range(len(scores)):
item = scores[i]
item.append(sports_scores[i]) # 6
courses.append("music")
courses.append("art")
courses.append("science") # 没有选择的课程的成绩用-1表示
music_scores = (-1, 90, -1)
art_scores = (-1, -1, 95)
science_scores = (90, -1, -1) for i in range(len(scores)):
item = scores[i]
item.append(music_scores[i])
item.append(art_scores[i])
item.append(science_scores[i])

改代码执行完后,

courses如下

['language', 'math', 'english', 'sports', 'music', 'art', 'science']

scores如下

[
['A', 90, 80, 85, 85, -1, -1, 90],
['B', 80, 87, 86, 90, 90, -1, -1],
['C', 85, 90, 90, 85, -1, 95, -1]
]
  1. 实现2, 3, 4, 代码如下

# 2
# 2
name = "A"
for item in scores:
item_name = item[0]
if item_name == name:
# 用output变量来计算最后的输出
output = "name: %s" % item_name
for i in range(len(courses)):
# 遍历所有课程的索引
si = i + 1 # 成绩的索引为课程索引+1
if item[si] >= 0:
# 如果成绩值不小于0,就代表选择了这门课程
course = courses[i]
output += ", %s: %s" % (course, item[si])
output += "."
print(output) # 3
d_item = ("D", 80, 85, 85, 85, -1, -1, 85)
scores.append(d_item) # 4
for item in scores:
item_name = item[0]
# 用s来计算总分
s = 0
# 用output变量来计算对应的输出
output = "%s: " % item_name
for i in range(len(courses)):
# 遍历所有课程的索引
si = i + 1 # 成绩的索引为课程索引+1
if item[si] >= 0:
# 如果成绩值不小于0,就代表选择了这门课程
course = courses[i]
output += "%s=%s, " % (course, item[si])
s += item[si]
output += "sum=%s." % s
print(output)

其输出为

name: A, language: 90, math: 80, english: 85, sports: 85, science: 90.
A: language=90, math=80, english=85, sports=85, science=90, sum=430.
B: language=80, math=87, english=86, sports=90, music=90, sum=433.
C: language=85, math=90, english=90, sports=85, art=95, sum=445.
D: language=80, math=85, english=85, sports=85, science=85, sum=420.

主要使用字典

  1. 实现1, 5, 6, 代码如下
# 1 每个人的成绩信息换成用字典来存储。
# 课程名作为该字典的键,成绩作为该字典的值。
scores = {
"A": {
"language":90,
"math":80,
"english":85
},
"B": {
"language":80,
"math":87,
"english":86
},
"C": {
"language":85,
"math":90,
"english":90
}
} # 5
sports_scores = {
"A": 85,
"B": 90,
"C": 85
}
for name in scores:
info = scores[name]
info["sports"] = sports_scores[name] # 6
add_scores = {
"A": {
"science": 90
},
"B": {
"music": 90
},
"C": {
"art": 95
}
} for name in scores:
info = scores[name]
new_info = add_scores[name]
info.update(new_info)

方法介绍:

dict.update(other):

Update the dictionary with the key/value pairs from other, overwriting existing keys. Return None.

使用其他键/值对更新字典,覆盖现有键。无返回值(直接修改了原有的字典)。

使用示例:

>>> a_dict = {"a": 12, "b": 13, "c": 11}
>>> other = {"c":15, "d": 20}
>>> a_dict.update(other)
>>> a_dict
{'a': 12, 'b': 13, 'c': 15, 'd': 20}

此时scores值如下

{
'A': {'language': 90, 'math': 80, 'english': 85, 'sports': 85, 'science': 90},
'B': {'language': 80, 'math': 87, 'english': 86, 'sports': 90, 'music': 90},
'C': {'language': 85, 'math': 90, 'english': 90, 'sports': 85, 'art': 95}
}
  1. 实现2, 3, 4, 代码如下
# 2
name = "A"
score_a = scores[name]
output = "name: %s" % name
for key in score_a: # key即是该同学选择的课程的名称
output += ", %s: %s" % (key, score_a[key])
output += "." print(output) # 3
score_d = {
"language": 80,
"math": 85,
"english": 85,
"sports": 85,
"science": 85
} scores["D"] = score_d # 4
for name in scores:
info = scores[name]
output = "%s: " % name
s = 0
for key in info: # key即是该同学选择的课程的名称
output += "%s=%s, " % (key, info[key])
s += info[key] output += "sum=%s." % s
print(output)

其输出为

name: A, language: 90, math: 80, english: 85, sports: 85, science: 90.
A: language=90, math=80, english=85, sports=85, science=90, sum=430.
B: language=80, math=87, english=86, sports=90, music=90, sum=433.
C: language=85, math=90, english=90, sports=85, art=95, sum=445.
D: language=80, math=85, english=85, sports=85, science=85, sum=420.

大爽Python入门教程 2-5 *拓展实践,对比与思考的更多相关文章

  1. 大爽Python入门教程 3-4 实践例题

    大爽Python入门公开课教案 点击查看教程总目录 1. 求和 使用循环,计算列表所有项的和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, 11 ...

  2. 大爽Python入门教程 2-2 序列: 字符串、元组与列表

    大爽Python入门公开课教案 点击查看教程总目录 序列 序列(sequence): 顾名思义,有序的排列. 有序排列的一串数据. 一种容器,容器内成员有序排列. python的字符串str,元组tu ...

  3. 大爽Python入门教程 2-3 字符串,列表,字典

    大爽Python入门公开课教案 点击查看教程总目录 除了通用的序列方法, 列表和字符串还有些自己的专属方法. 后面介绍有些是英中文对照介绍(英文来自官方文档), 便于大家更深入的去理解其意思. 灵活的 ...

  4. 大爽Python入门教程 2-4 练习

    大爽Python入门公开课教案 点击查看教程总目录 方位输出 第一章有一个思考题,方位变换: 小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度), 小明面朝哪里?小明转过了多少圈? (3 ...

  5. 大爽Python入门教程 2-1 认识容器

    大爽Python入门公开课教案 点击查看教程总目录 1 什么是容器 先思考这样一个场景: 有五个学生,姓名分别为: Alan, Bruce, Carlos, David, Emma. 需要给他们都打一 ...

  6. 大爽Python入门教程 1-1 简单的数学运算

    大爽Python入门公开课教案 点击查看教程总目录 1 使用pycharm建立我们的第一个项目 打开pycharm,点击菜单栏,File->New Project 在Location(项目地址) ...

  7. 大爽Python入门教程 1-2 数与字符串

    大爽Python入门公开课教案 点击查看教程总目录 1 整数与浮点数 整数大家都知道,比如1, 2, 10, 123, 都是整数int. 浮点数是什么呢? 上一节的除法运算,不知道有没有人注意到,其结 ...

  8. 大爽Python入门教程 1-3 简单的循环与判断

    大爽Python入门公开课教案 点击查看教程总目录 这里只初步认识下循环和判断,以便于我们去实现一些简单的计算. 循环和判断的详细知识和细节,我们将在后面的章节(大概是第三章)展开阐述. 1 初步了解 ...

  9. 大爽Python入门教程 0-3 安装Atom与配置Python环境

    大爽Python入门公开课教案 点击查看教程总目录 安装轻量级IDE--Atom 一 下载 下面步骤1,2中网络卡顿的朋友, 请直接查看步骤3来操作 1. 搜索官网 使用搜索引擎搜索Atom, 打开搜 ...

随机推荐

  1. 架构师必备:MySQL主从同步原理和应用

    日常工作中,MySQL数据库是必不可少的存储,其中读写分离基本是标配,而这背后需要MySQL开启主从同步,形成一主一从.或一主多从的架构,掌握主从同步的原理和知道如何实际应用,是一个架构师的必备技能. ...

  2. 在开源项目或项目中使用git建立fork仓库

    前言: vector我们经常使用,对vector里面的基本函数构造函数.增加函数.删除函数.遍历函数我们也会用到.其中在使用遍历之后erase删除元素过程中,会出现一种删除最后一个元素破坏了迭代器的情 ...

  3. oracle 不能用上下键调用sql语句

    在Linux的sqlplus中运行SQL语句之后,想用上下键把历史命令找出来,发现不支持. 安装rlwrap 重启sqlplus 3,使用rlwrap,rlwrap sqlplus / as sysd ...

  4. 全场景效能平台猪齿鱼常用的前端css实现方案

    ​ 居中 最常用的height + line-height,以及margin:0 auto的居中方式就不再阐述,以下介绍两种容错性高的实现方案. flex布局实现 ​ 猪齿鱼前端日常开发中,我们多以f ...

  5. netty系列之:使用netty实现支持http2的服务器

    目录 简介 基本流程 CleartextHttp2ServerUpgradeHandler Http2ConnectionHandler 总结 简介 上一篇文章中,我们提到了如何在netty中配置TL ...

  6. 264.丑数II

    题目 给你一个整数 n ,请你找出并返回第 n 个 丑数 . 丑数 就是只包含质因数 2.3 和/或 5 的正整数. 示例 1: 输入:n = 10 输出:12 解释:[1, 2, 3, 4, 5, ...

  7. 6月6日 Scrum Meeting

    日期:2021年6月6日 会议主要内容概述: 删除模板选择页面,画图页面新增模板选择 保存时后端判重 后端要新增数据分享url 主题色->lxd:画图教程->lsp:表格数据分析-> ...

  8. UltraSoft - Beta - Scrum Meeting 5

    Date: May 21st, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 修复了课程通知链接的bug Liuzh 前端 暂无 Kkkk 前端 增加消息中心板 ...

  9. 修改git仓库的远程地址

    在我们开发的过程中,代码一般是由 git 来管理的,但有些时候我们的 git 仓库的地址可能发生了变换,比如我们使用的 gitLab 地址发生了变化,那么这个时候如何来将原项目的 git 地址进行修改 ...

  10. Noip模拟46 2021.8.23

    给了签到题,但除了签到题其他的什么也不会.... T1 数数 人均$AC$,没什么好说的,就是排个序,然后双指针交换着往中间移 1 #include<bits/stdc++.h> 2 #d ...