第1关:元组的使用:这份菜单能修改吗?

任务描述

元组看起来犹如列表,但元组使用圆括号()而不是[]来标识,而且列表的元素可以修改,但元组的元素不能修改。本关介绍元组的常见使用方法以及元组和列表的使用区别。下面用饭店菜单的例子来说明列表和元组使用的应用场景:

现在有一个餐馆要向每个包厢都投放两份菜单,菜单上有4种菜名。我们想将两个菜单上最后一道菜名互换一下,也想快速知道改变后的两份菜单上单词首字母最大的菜名。而我们首先需要判断该用列表的方法还是元组的方法实现这个目标。为了实现这个目标,我们需要先学习元组的相关使用知识以及元组与列表的区别。

相关知识

元组与列表

元组与列表很相似,两者之间的差别在于:

  • 列表在初始化后其中的元素还可以进行增删改等操作,但是元组在初始化后其中的元素不能进行更改;
  • 列表在赋值时使用方括号[],而元组在赋值时使用小括号()

因为元组具有不可变的特性,所以在能用元组替代列表的地方最好都使用元组,这样代码更安全。

创建元组

元组创建很简单,只需要在括号()中添加元素,元素之间用逗号隔开。元组中只包含单个元素时,需要在该元素后面添加逗号。例如:

  1. menu1 = ('meat','fish','chicken')
  2. menu2 = ('meat',)

访问元组

元组和列表一样,可以使用下标索引来访问元组中的值。例如:

  1. menu = ('meat','fish','chicken','carrot')
  2. print(menu[0])
  3. print(menu[1:3])

输出结果:

  1. meat
  2. ('fish', 'chicken')

修改元组

元组中的元素值是不可以修改的,如果强行修改会报错。例如我们想修改元组menu中的某个值:

  1. menu = ('meat','fish','chicken','carrot')
  2. menu[0] = 'pizza'
  3. print(menu[0])

输出结果:

  1. TypeError: 'tuple' object does not support item assignment

系统会自动报错,元组中的元素值不支持修改。

元组内置函数

元组和列表一样,都有一些内置函数方便编程。例如:

  • len(tuple):计算元组中元素个数;

  • max(tuple):返回元组中元素的最大值;

  • min(tuple):返回元组中元素的最小值;

  • tuple(seq):将列表转换为元组。

元组中的元素是不能改变的,它也没有append()insert()这样的方法,但其他获取元素的方法和列表是一样的。

编程要求

本关的编程任务是补全src/Step1/menu_test.py文件的代码内容,实现如下功能:

  • 将输入的菜单menu_list转换为元组类型;

  • 打印输出生成的元组;

  • 打印输出元组中首字母最大的元素。

本关涉及的代码文件src/Step1/menu_test.py的代码框架如下:

  1. # coding=utf-8
  2. # 创建并初始化munu_list列表
  3. menu_list = []
  4. while True:
  5. try:
  6. food = input()
  7. menu_list.append(food)
  8. except:
  9. break
  10. # 请在此添加代码,对menu_list进行元组转换以及元组计算等操作,并打印输出元组及元组最大的元素
  11. ########## Begin ##########
  12. ########## End ##########

测试说明

本关的测试文件是src/Step1/menu_test.py,测试过程如下:

  1. 平台自动编译并运行menu_test.py,并以标准输入方式提供测评输入;

  2. 平台获取程序的输出,然后将其与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/Step1/menu_test.py的样例测试集:

测试输入:

  1. pizza
  2. chicken
  3. carrot
  4. turkey
  5. banana

预期输出:

  1. ('pizza', 'chicken', 'carrot', 'turkey', 'banana')
  2. turkey

开始你的任务吧,祝你成功!

代码:

# coding=utf-8# 创建并初始化menu_list列表
menu_list = []
while True:try:food = input()menu_list.append(food)except:break# 请在此添加代码,对menu_list进行元组转换以及元组计算等操作,并打印输出元组及元组最大的元素
###### Begin ######
print(tuple(menu_list))
print(max(menu_list))
#######  End #######

第2关:字典的使用:这份菜单可以修改

任务描述

字典和列表一样,都是 Python 中十分重要的可变容器模型,都可以存储任意类型元素。我们将以菜单的例子来说明字典使用的基本知识,餐馆的菜单上不仅包含菜名,菜名后面还必须包含该道菜的价格。如果要用列表实现,就需要两个列表,例如:

  1. list_menu = ['fish','pork','potato','noodles']
  2. list_price = [40,30,15,10]

给定一个菜名,要查找相应的价格,就先要在list_menu中找到相应的位置,再在list_price中找到相应的价格。这种方式效率低下,那么我们是否可以将菜名和价格都存储在一个可变容器中呢?答案是可以的。

在本关中,我们将学习和掌握能够将相关信息关联起来的 Python 字典的相关知识,并完成对包含菜名和价格的菜单的处理操作。

相关知识

字典是 Python 最强大的数据类型之一,通过键-值对的方式建立数据对象之间的映射关系。字典的每个键-值对用冒号:分割,每个键-值对间用逗号,分隔开,字典则包含在{}中。列表格式如下:

  1. d = { key1 : value1, key2 : value2 }

每个键都与一个值相关联,我们可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何 Python 对象用作字典中的值。

访问字典中的值

要获取与键相关联的值,可依次指定字典名和放在方括号内的键,如下所示:

  1. # 创建并初始化menu字典
  2. menu = {'fish':40, 'pork':30, 'potato':15, 'noodles':10}
  3. # 获取并返回menu字典中键'fish'键对应的值
  4. print(menu['fish'])

输出结果:

  1. 40

添加键-值对

字典是一种动态数据结构,可随时在字典中添加键-值对。要添加键-值对时,可依次指定字典名、键和键对应的值。下面在字典menu中添加两道菜的菜名和价格:

  1. # 创建并初始化menu字典
  2. menu = {'fish':40, 'pork':30, 'potato':15, 'noodles':10}
  3. # 向menu字典中添加菜名和价格
  4. menu['juice'] = 12
  5. menu['egg'] = 5
  6. # 输出新的menu
  7. print(menu)

输出结果:

  1. {'fish': 40,'pork': 30,'potato': 15,'noodles': 10, 'juice': 12,'egg': 5}

新的menu字典包含6个键-值对,新增加的两个键-值对(菜名和对应价格)添加在了原有键-值对的后面。

注意:字典中键-值对的排列顺序和添加顺序没有必然联系。Python 不关心字典中键-值对的排列顺序,而只关心键与值的对应关系。 同理,字典和列表一样,可以先创建一个空字典,然后可以不断向里面添加新的键-值对。

修改字典中的值

字典和列表一样,里面的值都是可以修改的。要修改字典中的值,可直接指定字典中的键所对应的新值。例如,将menu中的fish价格改为50

  1. # 创建并初始化menu字典
  2. menu = {'fish':40, 'pork':30, 'potato':15, 'noodles':10}
  3. # 修改menu字典中菜fish的价格
  4. menu['fish'] = 50
  5. # 打印输出新的menu
  6. print(menu)

输出结果:

  1. {'fish': 50, 'pork': 30, 'potato': 15, 'noodles': 10}

删除键-值对

我们可以通过del方法删除字典中不需要的键-值对。使用del方法时,要指定字典名和要删除的键。例如,在menu菜单中删除键noodles和它的值:

  1. # 创建并初始化menu字典
  2. menu = {'fish':40, 'pork':30, 'potato':15, 'noodles':10}
  3. # 删除noodles键值对
  4. del menu['noodles']
  5. # 打印输出新的menu
  6. print(menu)

输出结果:

  1. {'fish': 40, 'pork': 30, 'potato': 15}

如果您想了解更多有关字典使用的知识,请参考:【美】 Eric Matthes 著《 Python 编程——从入门到实践》第六章。

编程要求

本关的编程任务是补全src/Step2/menu.py文件的代码,实现相应的功能。具体要求如下:

  • menu_dict字典中添加一道菜名lamb,它的价格是50

  • 获取menu_dict字典中的fish的价格并打印出来;

  • menu_dict字典中的fish的价格改为100

  • 删除menu_dict字典中noodles这道菜;

  • 输出新的menu_dict菜单。

本关涉及的代码文件src/Step2/menu.py的代码框架如下:

  1. # coding=utf-8
  2. # 创建并初始化munu_dict字典
  3. menu_dict = {}
  4. while True:
  5. try:
  6. food = input()
  7. price = int(input())
  8. menu_dict[food]= price
  9. except:
  10. break
  11. # 请在此添加代码,实现对menu_dict的添加、查找、修改等操作,并打印输出相应的值
  12. ########## Begin ##########
  13. ########## End ##########

测试说明

本关的测试文件是src/Step2/menu.py,测试过程如下:

  1. 平台自动编译并运行menu.py,并以标准输入方式提供测试输入;

  2. 平台获取程序输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/Step2/menu.py的样例测试集:

测试输入:

  1. pizza
  2. 40
  3. noodles
  4. 30
  5. carrot
  6. 20
  7. turkey
  8. 34
  9. fish
  10. 37

预期输出:

  1. 37
  2. {'pizza': 40, 'carrot': 20, 'turkey': 34, 'fish': 100, 'lamb': 50}

开始你的任务吧,祝你成功!

代码:

# coding=utf-8# 创建并初始化menu_dict字典
menu_dict = {}
while True:try:food = input()price = int(input())menu_dict[food]= priceexcept:break
# 请在此添加代码,实现对menu_dict的添加、查找、修改等操作,并打印输出相应的值
########## Begin ##########
menu_dict['lamb']=50
print(menu_dict['fish'])
menu_dict['fish']=100
del menu_dict['noodles']
print (menu_dict)
########## End ##########

第3关:字典的遍历:菜名和价格的展示

任务描述

Python 字典中包含大量数据,它和列表一样,支持遍历操作。Python有多种遍历字典的方式,可以遍历字典的所有键-值对、键或值。例如,餐馆的菜单包含了菜名和价格等信息,餐馆需要将菜名和价格都展示给顾客,但也有些时候只需要将菜名都展示给厨师,还有些时候只需要将价格展示给收银员,这三种情况就用到了字典不同的遍历方式。

本关的目标是让学习者掌握字典遍历的相关知识和用法,并基于这些知识实现对菜单不同的查找和展示处理。

相关知识

遍历字典中的键-值对

Python 为字典类型提供了items()方法,items()方法会将字典里的所有的键与值一起返回。例如,餐馆有一个菜单包含了菜名和价格信息,菜名和价格顾客都需要知道,可以通过遍历输出menu字典的键和值来实现:

  1. # coding = utf-8
  2. # 创建并初始化menu菜单字典
  3. menu={'fish':'40','pork':'30','potato':'20','lamb':'50'}
  4. # 利用items()方法遍历输出键和值
  5. for key,value in menu.items():
  6. print('\nkey:'+key)
  7. print('value:'+value)

输出结果:

  1. key:fish
  2. value:40
  3. key:pork
  4. value:30
  5. key:potato
  6. value:20
  7. key:lamb
  8. value:50

输出结果表示,items()方法每次都将对应的键和值指定到keyvalue变量中,然后用for循环输出。

遍历字典中的键

对于餐馆中的厨师来说,他们并不想要知道菜的价格,只需要知道菜名然后将其做出来就行。所以对于厨师来说,我们需要遍历menu字典中的所有菜名。Python 为字典类型内置了keys()方法,该方法会将字典里的键遍历出来。例如:

  1. # 创建并初始化menu菜单字典
  2. menu={'fish':'40','pork':'30','potato':'20','lamb':'50'}
  3. # 利用keys()方法遍历输出键
  4. for key in menu.keys():
  5. print('food_name:'+key)

输出结果:

  1. food_name:fish
  2. food_name:pork
  3. food_name:potato
  4. food_name:lamb

输出结果表示,keys()方法每次都是将menu菜单中的键输出,显示菜名。

遍历字典中的值

对于餐馆中的收银员来说,他们可能并不想知道菜单的菜名,只需要知道菜的价格,然后收账即可。所以对于收银员来说,我们需要遍历menu字典中的所有菜的价格。Python 为字典类型内置了values()方法,该方法会将字典里的值遍历出来。例如:

  1. # 创建并初始化menu菜单字典
  2. menu={'fish':'40','pork':'30','potato':'20','lamb':'50'}
  3. # 利用values()方法遍历输出值
  4. for value in menu.values():
  5. print('food_price:'+value)

输出结果:

  1. food_price:40
  2. food_price:30
  3. food_price:20
  4. food_price:50

输出结果表示,values()方法每次都是将menu菜单中的值输出,显示菜的价格。

如果您想了解更多有关字典使用的知识,请参考:【美】 Eric Matthes 著《 Python 编程——从入门到实践》第六章。

编程要求

本关的编程任务是补全src/Step3/key-values.py文件的代码,实现相应的功能。具体要求如下:

  • menu_dict菜单的键遍历输出;

  • menu_dict菜单的值遍历输出。

本关涉及的代码文件src/Step3/key_values.py的代码框架如下:

  1. # coding=utf-8
  2. # 创建并初始化munu_dict字典
  3. menu_dict = {}
  4. while True:
  5. try:
  6. food = input()
  7. price = int(input())
  8. menu_dict[food]= price
  9. except:
  10. break
  11. # 请在此添加代码,实现对menu_dict的遍历操作并打印输出键与值
  12. ########## Begin ##########
  13. ########## End ##########

测试说明

本关的测试文件是src/Step3/key_values.py,测试过程如下:

  1. 平台自动编译并运行key_values.py,并以标准输入方式提供测试输入;

  2. 平台获取程序输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/Step3/key_values.py的样例测试集:

测试输入:

  1. Spring Rolls
  2. 40
  3. pork
  4. 30
  5. Fried Wonton
  6. 15

预期输出:

  1. Spring Rolls
  2. pork
  3. Fried Wonton
  4. 40
  5. 30
  6. 15

开始你的任务吧,祝你成功!

代码:

# coding=utf-8# 创建并初始化menu_dict字典
menu_dict = {}
while True:try:food = input()price = int(input())menu_dict[food]= priceexcept:break# 请在此添加代码,实现对menu_dict的遍历操作并打印输出键与值
########## Begin ##########
for key in menu_dict.keys():print(''+key)
for value in menu_dict.values():print(value)
########## End ##########

第4关:嵌套 - 菜单的信息量好大

任务描述

Python 的列表和字典可以存储任意类型的元素,所以我们可以将字典存储在列表中,也可以将列表存储在字典中,这种操作称为嵌套。例如,餐馆中的菜单不仅仅包含菜名和价格,可能还会包含很多其他信息,这时候我们可能就需要采取嵌套的存储方式。

本关任务是让学习者利用嵌套方式存储菜单,让读者掌握 Python 嵌套的基本操作。

相关知识

列表中存储字典

餐馆中已经有了3份菜单,每份菜单都会有菜名和价格。我们要将这些信息存储在一起,可以采取如下方法:将3份菜单用字典的方式存储菜名和价格,然后将这3份菜单字典存储在一个列表中,例如:

  1. # 创建3个菜单字典,包含菜名和价格
  2. menu1 = {'fish':40, 'pork':30, 'potato':20,'noodles':15}
  3. menu2 = {'chicken':30, 'corn':55, 'lamb':65,'onion':12}
  4. menu3 = {'bacon':36, 'beaf':48, 'crab':72,'eggs':7}
  5. # 将3个菜单字典存储到列表menu_total中
  6. menu_total = [menu1,menu2,menu3]
  7. # 输出列表
  8. print(menu_total)

输出结果:

  1. [{'fish': 40, 'pork': 30, 'potato': 20, 'noodles': 15}, {'chicken': 30, 'corn': 55, 'lamb': 65, 'onion': 12}, {'bacon': 36, 'beaf': 48, 'crab': 72, 'eggs': 7}]

字典中存储列表

我们也可以在字典中存储列表。比如我们对于一份菜单,菜名作为键,而值我们想是这道菜的配料,那么我们就可以将这些配料作为列表存储,然后作为值存储在字典中。例如:

  1. # 初始化menu菜单,里面包含配料列表
  2. menu = {'fish':['vinegar','soy','salt'], 'pork':['sugar','wine']}
  3. # 输出pork这道菜的配料
  4. print('The burding of pork is:',menu['pork'])

输出结果:

  1. The burding of pork is: ['sugar', 'wine']

字典中存储字典

我们也可以在字典中存储字典。例如我们有一份总菜单,包含2个子菜单,每个子菜单都包含菜名和价格。例如:

  1. # 创建一个字典menu_sum,里面包含两个子菜单字典menu1和menu2
  2. menu_sum = {
  3. 'menu1':{'fish':40, 'pork':30, 'potato':20,'noodles':15},
  4. 'menu2':{'chicken':30, 'corn':55, 'lamb':65,'onion':12}
  5. }
  6. # 输出menu1和menu2中的菜名和价格
  7. print(menu_sum['menu1'])
  8. print(menu_sum['menu2'])

输出结果:

  1. {'fish': 40, 'pork': 30, 'potato': 20, 'noodles': 15}
  2. {'chicken': 30, 'corn': 55, 'lamb': 65, 'onion': 12}

如果您想了解更多有关嵌套的使用知识,请参考:【美】 Eric Matthes 著《 Python 编程——从入门到实践》第六章。

编程要求

本关的编程任务是补全src/Step4/menu_nest.py文件的代码,实现相应的功能。具体要求如下:

  • menu_total列表中初始时只包含menu1字典,menu1字典中包含两道菜和两道菜的价格;

  • 编程要求是向menu_total列表中添加另外一个菜单字典menu2menu2菜单中的菜名和menu1菜单一样,菜的价格是menu1菜的价格的2倍;

  • 输出新的menu_total列表。

本关涉及的代码文件src/Step4/menu_nest.py的代码框架如下:

  1. # coding=utf-8
  2. # 初始化menu1字典,输入两道菜的价格
  3. menu1 = {}
  4. menu1['fish']=input()
  5. menu1['pork']=input()
  6. # menu_total列表现在只包含menu1字典
  7. menu_total = [menu1]
  8. # 请在此添加代码,实现编程要求
  9. ########## Begin ##########
  10. ########## End ##########
  11. # 输出menu_total列表
  12. print(menu_total)

测试说明

本关的测试文件是src/Step4/menu_nest.py,测试过程如下:

  1. 平台自动编译运行menu_nest.py,并以标准输入方式提供测试输入;

  2. 平台获取程序输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/Step4/menu_nest.py的样例测试集:

测试输入:

  1. 40
  2. 30

预期输出:

  1. [{'fish': 40, 'pork': 30}, {'fish': 80, 'pork': 60}]

开始你的任务吧,祝你成功!

代码:

# coding=utf-8# 初始化menu1字典,输入两道菜的价格
menu1 = {}
menu1['fish']=int(input())
menu1['pork']=int(input())# menu_total列表现在只包含menu1字典
menu_total = [menu1]# 请在此添加代码,实现编程要求
########## Begin ##########
menu2= {}
menu2['fish']=menu1['fish']*2
menu2['pork']=menu1['pork']*2menu_total.append(menu2)
########## End ##########
# 输出menu_total列表
print(menu_total)

实验四 元组与字典(educoder)相关推荐

  1. python实验题第四章_「Python」2020.03.16学习笔记 | 第四章列表、元组、字典-习题(11-13)...

    学习测试开发的Day74,真棒! 学习时间为1H 第四章列表.元组.字典-习题(11-13) 11.求两个集合的交集和并集 代码 list1=[1,2,3,4] list2=[2,3,5,5] def ...

  2. python中字典和集合对象是无序的_Python基础(四):元组、字典和集合

    基础学习第四弹,常用对象:元组.字典和集合 一.元组 1.1 元组的应用场景 思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做? 答:列表?列表可以一次性存储多个数据,但是列表中的数据 ...

  3. python列表元组字典集合实验心得_python学习小总结(列表、元组、字典、集合、字符串)...

    ---恢复内容开始--- 一.列表(list) 1.添加 append():追加,在列表末尾添加元素. 列表名.append(添加的元素) extend():扩展,在列表末尾添加元素. 列表名.ext ...

  4. Python学习入门基础 -- 第四章 列表、元组、字典、字符串变量使用、变量进阶

    Python基础入门知识点总结传送门 第一章 认识Python.Python常用集成开发环境PyCharm 第二章 注释.变量基本使用.变量的命名 第三章 运算符.判断if语句.while和for循环 ...

  5. 【python第四章——序列(列表、元组、字典、集合、字符串、正则)】

    python第四章--序列 第四章--序列 4.1列表 4.2元组 4.3字典 4.4集合 4.5字符串(重要) 4.6正则表达式 第四章--序列 概念:序列指一块可存放多个值的连续内存空间,这些值按 ...

  6. python基础语法合集-Python基础语法(四)—列表、元组、字典、集合、字符串

    列表 基本概念列表是有序的元素集合,所有元素放在一对中括号中,用逗号隔开,没有长度限制: 列表索引值以0为开始值,-1为从未尾的开始位置. 列表可以使用+操作符进行拼接,使用*表示重复. 当列表元素增 ...

  7. python定义字典列表_Python基础语法(四)—列表、元组、字典、集合、字符串

    列表 基本概念列表是有序的元素集合,所有元素放在一对中括号中,用逗号隔开,没有长度限制: 列表索引值以0为开始值,-1为从未尾的开始位置. 列表可以使用+操作符进行拼接,使用*表示重复. 当列表元素增 ...

  8. Python基础(四)(列表、元组、字典、字符串、Python内置函数、切片、运算符、成员运算符)

    高级变量类型 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) 真 True 非 0 数 -- 非零即真 假 Fa ...

  9. python实训总结报告书_20172304 实验四python综合实践报告

    20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...

最新文章

  1. EZBioCloud:16S和原核基因组物种注释和新种鉴定
  2. C语言水洼数算法,C++ 数据结构之水洼的数量算法
  3. ref获取元素 vue 删除子元素_vue中的 ref 和 $refs
  4. HarmonyOS之IDL接口使用规范
  5. LiveVideoStackCon深圳 - 洞察多媒体技术生态趋势与机会
  6. springboot版本升级导致webservice调用失败org.apache.cxf.common.jaxb.JAXBUtils.createMininumEscapeHandle
  7. 在objective-C中#pragma mark是什么意思?
  8. 自动化构建之bower
  9. python 生成器原理_python生成器
  10. 拓端tecdat|Python用PyMC3实现贝叶斯线性回归模型
  11. python随机生成字符串_Python 生成一段随机字符串的两种写法
  12. 什么叫预判_挖机事故发生之前,挖机司机做了什么?
  13. Spring揭秘 — IoC
  14. 仿站工具箱http://fztool.ptcms.com/
  15. 前端实现在浏览器网页中录音
  16. 基于单片机的智能视力保护监控系统设计
  17. edp和edt哪个好_香水edt和edp的区别
  18. 实验3 交互式SQL语言1
  19. 抢红包: 红包过期失效案例
  20. 微信小程序-收藏功能

热门文章

  1. C++ reverse函数源码解析
  2. 再次登顶SPC-1,这家发展18年的存储厂商暗藏什么绝技?
  3. IDEA——》设置方法的注释模板
  4. java基本类型和包装类型的区别
  5. Mac 配置Nginx域名转发
  6. Android个推需要的权限,Android 推送实现-接入个推(GTPush)
  7. 使用数据结构中的队列解决舞伴搭配问题
  8. 小米在B站,跟1500万年轻人聊了啥?
  9. 【Blender】基础物体建模(5)
  10. c语言 队列---->链表实现