首页 > 编程语言 >大爽Python入门教程 2-7 *拓展实践,对比与思考

大爽Python入门教程 2-7 *拓展实践,对比与思考

时间:2023-02-12 19:46:36浏览次数:59  
标签:name Python 大爽 入门教程 item scores 90 80 85

大爽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.

标签:name,Python,大爽,入门教程,item,scores,90,80,85
From: https://www.cnblogs.com/BigShuang/p/17114532.html

相关文章

  • 大爽Python入门教程 2-6 拓展练习
    大爽Python入门公开课教案点击查看教程总目录方位输出第一章有一个思考题,方位变换:小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度),小明面朝哪里?小明转过......
  • Python面向对象---类的基本使用
     ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 ......
  • Python爬虫之Js逆向案例(16)-京东商品评论&店铺详情案例
    <center>声明:京东商品评论&店铺详情获取分析仅用于研究和学习,如有侵权,可联系删除</center>一次运行程序,同时获取一下内容:1.获取商店详情;2.获取当前商品评论;3.获取商品的......
  • Python 类型注解
    在Python语言发展的过程中,PEP提案发挥了巨大的作用,如PEP3107和PEP484提案,分别给我们带来了函数注解(FunctionAnnotations)和类型提示(TypeHints)的功能。PEP3107:定义了......
  • Python 高级编程之网络编程 Socket(六)
    目录一、概述二、Pythonsocket模块1)Socket类型1、创建TCPSocket2、创建UDPSocket2)Socket函数1、服务端socket函数2、客户端socket函数3、公共socket函数三、单工,半......
  • 学习python中的字符串操作
    字符串字符串的存储地址原理​ 在python中有一个字符串保留区,当中存放了声明的字符串,每一个字符串对应一个地址,变量名指向对应的地址,只要字符串相同,声明内容相同的字符......
  • python&&matlab
    绘制折线图importmatplotlib.pyplotaspltsplts.figure(figsize=[10,5],dpi=80)#绘制一周的天气的变化plts.plot([1,2,3,4,5,6,7],[12,14,8,7,3,19,4])plts.show()......
  • Python网络爬虫与数据挖掘——复习笔记
    目录\(\ttrequests\)库爬取页面\(\ttrequests\)库爬取搜索引擎\(\ttrequests\)库爬取网络图片\(\ttrequests\)库爬取页面importrequests#引入库url="...........
  • Python----基础知识测试
    一、单选题(每题2分)1、列标识符命名中,符合规范的是()A、1aB、forC、_123D、#_b2、下列标识符中,不是Python支持的数据类型的是()A、charB、intC、floatD、str3、下......
  • Python之装饰器
    1.装饰器的定义就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数。装饰器的功能特点:不修改已有函数的源代码不修改已有函数的调用方式给已有函数增加额外的功能......