zoukankan      html  css  js  c++  java
  • 《Python编程从入门到实践》练习题

    第2章 变量和简单数据类型

    2-1 简单消息: 将一条消息存储到变量中,再将其打印出来。

    2-2 多条简单消息: 将一条消息存储到变量中,将其打印出来;再将变量的值修改为一条新消息,并将其打印出来。

    2-3 个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello Eric, would you like to learn some Python today?”。

    2-4 调整名字的大小写: 将一个人名存储到一个变量中,再以小写、大写和首字母大写的方式显示这个人名。

    2-5 名言: 找一句你钦佩的名人说的名言,将这个名人的姓名和他的名言打印出来。输出应类似于下面这样(包括引号):Albert Einstein once said, “A person who never made a mistake never tried anything new."

    2-6 名言 2: 重复练习 2-5,但将名人的姓名存储在变量 famous_person 中,再创建要显示的消息,并将其存储在变量 message 中,然后打印这条消息。

    2-7 剔除人名中的空白: 存储一个人名,并在其开头和末尾都包含一些空白字符。务必至少使用字符组合" "和" "各一次。打印这个人名,以显示其开头和末尾的空白。然后,分别使用剔除函数 lstrip()、rstrip()和 strip()对人名进行处理,并将结果打印出来。

    2-8 数字 8: 编写 4 个表达式,它们分别使用加法、减法、乘法和除法运算,但结果都是数字 8。为使用 print 语句来显示结果,务必将这些表达式用括号括起来,也就是说,你应该编写 4 行类似于下面的代码:print(5 + 3)输出应为 4 行,其中每行都只包含数字 8。

    2-9 最喜欢的数字: 将你最喜欢的数字存储在一个变量中,再使用这个变量创建一条消息,指出你最喜欢的数字,然后将这条消息打印出来。

    2-10 添加注释: 选择你编写的两个程序,在每个程序中都至少添加一条注释。如果程序太简单,实在没有什么需要说明的,就在程序文件开头加上你的姓名和当前日期,再用一句话阐述程序的功能。

    2-11 Python 之禅: 在 Python 终端会话中执行命令 import this,并粗略地浏览一下其他的指导原则。

    第3章 列表简介

    3-1 姓名: 将一些朋友的姓名存储在一个列表中,并将其命名为 names。依次访问该列表中的每个元素,从而将每个朋友的姓名都打印出来。

    3-2 问候语: 继续使用练习 3-1 中的列表,但不打印每个朋友的姓名,而为每人打印一条消息。每条消息都包含相同的问候语,但抬头为相应朋友的姓名。

    3-3 自己的列表: 想想你喜欢的通勤方式,如骑摩托车或开汽车,并创建一个包含多种通勤方式的列表。根据该列表打印一系列有关这些通勤方式的宣言,如“I would like to own a Honda motorcycle”。

    3-4 嘉宾名单:如果你可以邀请任何人一起共进晚餐(无论是在世的还是故去的),你会邀请哪些人?请创建一个列表,其中包含至少 3 个你想邀请的人;然后,使用这个列表打印消息,邀请这些人来与你共进晚餐。

    3-5 修改嘉宾名单:你刚得知有位嘉宾无法赴约,因此需要另外邀请一位嘉宾。

    • 以完成练习 3-4 时编写的程序为基础,在程序末尾添加一条 print 语句,指出哪位嘉宾无法赴约。
    • 修改嘉宾名单,将无法赴约的嘉宾的姓名替换为新邀请的嘉宾的姓名。
    • 再次打印一系列消息,向名单中的每位嘉宾发出邀请。

    3-6 添加嘉宾:你刚找到了一个更大的餐桌,可容纳更多的嘉宾。请想想你还想邀请哪三位嘉宾。

    • 以完成练习 3-4 或练习 3-5 时编写的程序为基础,在程序末尾添加一条 print 语句,指出你找到了一个更大的餐桌。
    • 使用 insert()将一位新嘉宾添加到名单开头。
    • 使用insert()将一位新嘉宾添加到名单中间。
    • 使用insert()将一位新嘉宾添加到名单末尾。
    • 打印一系列消息,向名单中的每位嘉宾发出邀请。

    3-7 缩减名单:你刚得知新购买的餐桌无法及时送达,因此只能邀请两位嘉宾。

    • 以完成练习 3-6 时编写的程序为基础,在程序末尾添加一行代码,打印一条你只能邀请两位嘉宾共进晚餐的消息。
    • 使用 pop()不断地删除名单中的嘉宾,直到只有两位嘉宾为止。每次从名单中弹出一位嘉宾时,都打印一条消息,让该嘉宾知悉你很抱歉,无法邀请他来共进晚餐。 while len(persons)>2:
    • 对于余下的两位嘉宾中的每一位,都打印一条消息,指出他依然在受邀人之列。
    • 使用 del 将最后两位嘉宾从名单中删除,让名单变成空的。打印该名单,核实程序结束时名单确实是空的。

    3-8 放眼世界:想出至少 5 个你渴望去旅游的地方。

    • 将这些地方存储在一个列表中,并确保其中元素不是按字母顺序排序的
    • 按原始排列顺序打印该列表
    • 使用sorted()按字母顺序打印这个列表,同时不要修改它
    • 再次打印该列表,核实排列顺序未改变
    • 使用sorted()按字母顺序相反的顺序打印这个列表,同时不要修改它
    • 再次打印该列表,核实排列顺序未改变
    • 使用reserve()修改列表元素的排列顺序。打印该列表,核实列表排序确实变了
    • 使用reserve()再次修改列表元素的排列顺序。打印该列表,核实已经恢复到原来的排列顺序
    • 使用sort()按字母顺序打印这个列表,使其元素按字母顺序排序。打印该列表,核实列表排序确实变了
    • 使用sort()按字母顺序相反的顺序打印这个列表,使其元素按字母顺序相反的排序。打印该列表,核实列表排序顺序确实变了

    3-9 晚餐嘉宾:在完成练习 3-4~练习 3-7 时编写的程序之一中,使用 len()打印一条消息,指出你邀请了多少位嘉宾来与你共进晚餐。

    3-10 尝试使用各个函数:想想可存储到列表中的东西,如山岳、河流、国家、城市、语言或你喜欢的任何东西。编写一个程序,在其中创建一个包含这些元素的列表,然后,对于本章介绍的每个函数,都至少使用一次来处理这个列表

    3-11 有意引发错误:如果你还没有在程序中遇到过索引错误,就尝试引发一个这种错误。在你的一个程序中,修改其中的索引,以引发索引错误。关闭程序前,务必消除这个错误。

    第4章 操作列表

    4-1 比萨:想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用 for循环将每种比萨的名称都打印出来。

    • 修改这个 for 循环,使其打印包含比萨名称的句子,而不仅仅是比萨的名称。对于每种比萨,都显示一行输出,如“I like pepperoni pizza”。
    • 在程序末尾添加一行代码,它不在 for 循环中,指出你有多喜欢比萨。输出应包含针对每种比萨的消息,还有一个总结性句子,如“I really love pizza!”。

    4-2 动物:想出至少三种有共同特征的动物,将这些动物的名称存储在一个列表中,再使用 for 循环将每种动物的名称都打印出来。

    • 修改这个程序,使其针对每种动物都打印一个句子,如“A dog would make a greatpet”。
    • 在程序末尾添加一行代码,指出这些动物的共同之处,如打印诸如“Any of these animals would make a great pet!”这样的句子。

    4-3 数到 20:使用一个 for 循环打印数字 1~20(含)。

    4-4 一百万:创建一个列表,其中包含数字 1~1 000 000,再使用一个 for 循环将这些数字打印出来(如果输出的时间太长,按 Ctrl + C 停止输出,或关闭输出窗口)。

    4-5 计算 1~1 000 000 的总和:创建一个列表,其中包含数字 1~1 000 000,再使用min()和 max()核实该列表确实是从 1 开始,到 1 000 000 结束的。另外,对这个列表调用函数 sum(),看看 Python 将一百万个数字相加需要多长时间。

    4-6 奇数:通过给函数 range()指定第三个参数来创建一个列表,其中包含 1~20 的奇数;再使用一个 for 循环将这些数字都打印出来。

    4-7 3 的倍数:创建一个列表,其中包含 3~30 内能被 3 整除的数字;再使用一个 for循环将这个列表中的数字都打印出来。

    4-8 立方:将同一个数字乘三次称为立方。例如,在 Python 中, 2 的立方用 2 * * 3表示。请创建一个列表,其中包含前 10 个整数(即 1~10)的立方,再使用一个 for 循环将这些立方数都打印出来。

    4-9 立方解析:使用列表解析生成一个列表,其中包含前 10 个整数的立方。

    4-10 切片:选择你在本章编写的一个程序,在末尾添加几行代码,以完成如下任务。

    • 打印消息“The first three items in the list are:”,再使用切片来打印列表的前三个元素。
    • 打印消息“Three items from the middle of the list are:”,再使用切片来打印列表中间的三个元素。
    • 打印消息“The last three items in the list are:”,再使用切片来打印列表末尾的三个元素。

    4-11 你的比萨和我的比萨:在你为完成练习 4-1 而编写的程序中,创建比萨列表的副本,并将其存储到变量 friend_pizzas 中,再完成如下任务。

    • 在原来的pizza列表中添加一种披萨。
    • 在friend_pizzas列表中添加零一种披萨。
    • 核实你有两个不同的列表。为此,打印消息“My favorite pizzas are:”,再使用一个 for 循环来打印第一个列表;打印消息“My friend’s favorite pizzas are:”,再使用一个 for 循环来打印第二个列表。核实新增的比萨被添加到了正确的列表中。

    4-12 使用多个循环:在本节中,为节省篇幅,程序 foods.py 的每个版本都没有使用for 循环来打印列表。请选择一个版本的 foods.py,在其中编写两个 for 循环,将各个食品列表都打印出来。

    4-13 自助餐:有一家自助式餐馆,只提供五种简单的食品。请想出五种简单的食品,并将其存储在一个元组中。

    • 使用for循环将五种食物打印出来。
    • 尝试修改其中的一个元素,核实 Python 确实会拒绝你这样做。
    • 餐馆调整了菜单,替换了它提供的其中两种食品。请编写一个这样的代码块:给元组变量赋值,并使用一个 for 循环将新元组的每个元素都打印出来。

    4-14 PEP8:访问https://python.org/dev/peps/pep-0008,阅览PEP8格式设置指南。

    第5章 if语句

    5-1 条件测试:编写一系列条件测试;将每个测试以及你对其结果的预测和实际结果都打印出来。你编写的代码应类似于下面这样:

    car = ‘subaru’
    print(“Is car == ‘subaru’? I predict True.”)
    print(car == ‘subaru’)
     
    print(" Is car == ‘audi’? I predict False.")
    print(car == ‘audi’)

    5-2 更多的条件测试:你并非只能创建 10 个测试。如果你想尝试做更多的比较,可再编写一些测试,并将它们加入到 conditional_tests.py 中。对于下面列出的各种测试,至少编写一个结果为 True 和 False 的测试。

    • 检查两个字符串相等和不等。
    • 使用函数 lower()的测试。
    • 检查两个数字相等、不等、大于、小于、大于等于和小于等于。
    • 使用关键字 and 和 or 的测试。
    • 测试特定的值是否包含在列表中。
    • 测试特定的值是否未包含在列表中。

    5-3 外星人颜色 #1:假设在游戏中刚射杀了一个外星人,请创建一个名为alien_color 的变量,并将其设置为’green’、 ‘yellow’或’red’。

    • 编写一条 if 语句,检查外星人是否是绿色的;如果是,就打印一条消息,指出玩家获得了 5 个点。
    • 编写这个程序的两个版本,在一个版本中上述测试通过了,而在另一个版本中未通过(未通过测试时没有输出)。

    5-4 外星人颜色#2:像练习 5-3 那样设置外星人的颜色,并编写一个 if-else 结构。

    • 编写一条if语句,检查外星人是否是绿色的;如果是,就打印一条消息,指出玩家因射杀该外星人获得了5个点。如果不是,指出玩家获得了10个点。
    • 编写这个程序的两个版本,在一个版本中执行 if 代码块,而在另一个版本中执行 else 代码块。

    5-5 外星人颜色#3:将练习 5-4 中的 if-else 结构改为 if-elif-else 结构。

    • 如果外星人是绿色的,就打印一条消息,指出玩家获得了 5 个点。
    • 如果外星人是黄色的,就打印一条消息,指出玩家获得了 10 个点。
    • 如果外星人是红色的,就打印一条消息,指出玩家获得了 15 个点。
    • 编写这个程序的三个版本,它们分别在外星人为绿色、黄色和红色时打印一条消息。

    5-6 人生的不同阶段: 设置变量 age 的值, 再编写一个 if-elif-else 结构, 根据 age的值判断处于人生的哪个阶段。

    • 如果一个人的年龄小于 2 岁,就打印一条消息,指出他是婴儿。
    • 如果一个人的年龄为 2(含)~4 岁,就打印一条消息,指出他正蹒跚学步。
    • 如果一个人的年龄为 4(含)~13 岁,就打印一条消息,指出他是儿童。
    • 如果一个人的年龄为 13(含)~20 岁,就打印一条消息,指出他是青少年。
    • 如果一个人的年龄为 20(含)~65 岁,就打印一条消息,指出他是成年人。
    • 如果一个人的年龄超过 65(含) 岁,就打印一条消息,指出他是老年人

    5-7 喜欢的水果:创建一个列表,其中包含你喜欢的水果,再编写一系列独立的 if语句,检查列表中是否包含特定的水果。

    • 将该列表命名为favorite_fruits,并在其中包含三种水果
    • 编写 5 条 if 语句,每条都检查某种水果是否包含在列表中,如果包含在列表中,就打印一条消息,如“You really like bananas!”。

    5-8 以特殊方式跟管理员打招呼:创建一个至少包含 5 个用户名的列表,且其中一个用户名为’admin’。想象你要编写代码,在每位用户登录网站后都打印一条问候消息。遍历用户名列表,并向每位用户打印一条问候消息。

    • 如果用户名为'admin',就打印一条特殊的问候消息,如“Hello admin, would you like to see a status report?”。
    • 否则,打印一条普通的问候消息,如“Hello Eric, thank you for logging in again”。

    5-9 处理没有用户的情形:在为完成练习 5-8 编写的程序中,添加一条 if 语句,检查用户名列表是否为空。

    • 如果为空,就打印消息“We need to find some users!”。
    • 删除列表中的所有用户名,确定将打印正确的消息。

    5-10 检查用户名:按下面的说明编写一个程序,模拟网站确保每位用户的用户名都独一无二的方式

    • 创建一个至少包含 5 个用户名的列表,并将其命名为 current_users。
    • 再创建一个包含 5 个用户名的列表,将其命名为 new_users,并确保其中有一两个用户名也包含在列表 current_users 中。
    • 遍历列表 new_users,对于其中的每个用户名,都检查它是否已被使用。如果是这样,就打印一条消息,指出需要输入别的用户名;否则,打印一条消息,指出这个用户名未被使用。
    • 确保比较时不区分大消息;换句话说,如果用户名'John'已被使用,应拒绝用户名'JOHN'。

    5-11 序数:序数表示位置,如 1st 和 2nd。大多数序数都以 th 结尾,只有 1、 2 和 3例外。

    • 在一个列表中存储数字 1~9。
    • 遍历这个列表。
    • 在循环中使用一个 if-elif-else 结构,以打印每个数字对应的序数。输出内容应为1st、 2nd、 3rd、 4th、 5th、 6th、 7th、 8th 和 9th, 但每个序数都独占一行。

    第6章 字典

    6-1 人:使用一个字典来存储一个熟人的信息,包括名、姓、年龄和居住的城市。该字典应包含键 first_name、 last_name、 age 和 city。将存储在该字典中的每项信息都打印出来。

    6-2 喜欢的数字:使用一个字典来存储一些人喜欢的数字。请想出 5 个人的名字,并将这些名字用作字典中的键;想出每个人喜欢的一个数字,并将这些数字作为值存储在字典中。打印每个人的名字和喜欢的数字。为让这个程序更有趣,通过询问朋友确保数据是真实的。

    6-3 词汇表: Python 字典可用于模拟现实生活中的字典,但为避免混淆,我们将后者称为词汇表。

    • 想出你在前面学过的 5 个编程词汇,将它们用作词汇表中的键,并将它们的含义作为值存储在词汇表中。
    • 以整洁的方式打印每个词汇及其含义。为此,你可以先打印词汇,在它后面加上一个冒号,再打印词汇的含义;也可在一行打印词汇,再使用换行符( )插入一个空行,然后在下一行以缩进的方式打印词汇的含义

    6-4 词汇表 2:既然你知道了如何遍历字典,现在请整理你为完成练习 6-3 而编写的代码,将其中的一系列 print 语句替换为一个遍历字典中的键和值的循环。确定该循环正确无误后,再在词汇表中添加 5 个 Python 术语。当你再次运行这个程时,这些新术语及其含义将自动包含在输出中。

    6-5 河流:创建一个字典,在其中存储三条大河流及其流经的国家。其中一个键—值对可能是’nile’: ‘egypt’。

    • 使用循环为每条河流打印一条消息,如“The Nile runs through Egypt.”。
    • 使用循环将该字典中每条河流的名字都打印出来。
    • 使用循环将该字典包含的每个国家的名字都打印出来。

    6-6 调查:在 6.3.1 节编写的程序 favorite_languages.py 中执行以下操作。

    • 创建一个应该会接受调查的人员名单,其中有些人已包含在字典中,而其他人未包含在字典中。
    • 遍历这个人员名单,对于已参与调查的人,打印一条消息表示感谢。对于还未参与调查的人,打印一条消息邀请他参与调查。

    6-7 人:在为完成练习 6-1 而编写的程序中,再创建两个表示人的字典,然后将这三个字典都存储在一个名为 people 的列表中。遍历这个列表,将其中每个人的所有信息都打印出来。

    6-8 宠物:创建多个字典,对于每个字典,都使用一个宠物的名称来给它命名;在每个字典中,包含宠物的类型及其主人的名字。将这些字典存储在一个名为 pets 的列表中,再遍历该列表,并将宠物的所有信息都打印出来。

    6-9 喜欢的地方:创建一个名为 favorite_places 的字典。在这个字典中,将三个人的名字用作键;对于其中的每个人,都存储他喜欢的 1~3 个地方。为让这个练习更有趣些,可让一些朋友指出他们喜欢的几个地方。遍历这个字典,并将其中每个人的名字及其喜欢的地方打印出来。

    6-10 喜欢的数字:修改为完成练习6-2而编写的程序,让每个人都可以有多个喜欢的数字,然后将每个人的名字以及喜欢的数字打印出来。

    6-11 城市:创建一个名为 cities 的字典,其中将三个城市名用作键;对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、人口约数以及一个有关该城市的事实。在表示每座城市的字典中,应包含 country、 population 和 fact 等键。将每座城市的名字以及有关它们的信息都打印出来。

    第7章 用户输入和while循环

    7-1 汽车租赁:编写一个程序,询问用户要租赁什么样的汽车,并打印一条消息,如“Let me see if I can find you a Subaru”。

    7-2 餐馆订位:编写一个程序,询问用户有多少人用餐。如果超过 8 人,就打印一条消息,指出没有空桌;否则指出有空桌。

    7-3 10的整数倍:让用户输入一个数字,并指出这个数字是否是 10 的整数倍

    7-4 比萨配料:编写一个循环,提示用户输入一系列的比萨配料,并在用户输入’quit’时结束循环。每当用户输入一种配料后,都打印一条消息,说我们会在比萨中添加这种配料。

    7-5 电影票:有家电影院根据观众的年龄收取不同的票价:不到 3 岁的观众免费;3~12 岁的观众为 10 美元;超过 12 岁的观众为 15 美元。请编写一个循环,在其中询问用户的年龄,并指出其票价。

    7-6 三个出口:以另一种方式完成练习 7-4 或练习 7-5,在程序中采取如下所有做法。

    • 在 while 循环中使用条件测试来结束循环。
    • 使用变量 active 来控制循环结束的时机。
    • 使用 break 语句在用户输入'quit'时退出循环。

    7-7 无限循环:编写一个没完没了的循环,并运行它(要结束该循环,可按 Ctrl +C,也可关闭显示输出的窗口)。

    7-8 熟食店:创建一个名为 sandwich_orders 的列表,在其中包含各种三明治的名字;再创建一个名为 finished_sandwiches 的空列表。遍历列表sandwich_orders,对于其中的每种三明治,都打印一条消息,如 I made your tuna sandwich,并将其移到列表finished_sandwiches。所有三明治都制作好后,打印一条消息,将这些三明治列出来。

    7-9 五香烟熏牛肉(pastrami)卖完了:使用为完成练习 7-8 而创建的列表sandwich_orders,并确保’pastrami’在其中至少出现了三次。在程序开头附近添加这样的代码:打印一条消息,指出熟食店的五香烟熏牛肉卖完了;再使用一个 while 循环将列表 sandwich_orders 的’pastrami’都删除。确认最终的列表 finished_sandwiches 中不包含’pastrami’。

    7-10 梦想的度假胜地:编写一个程序,调查用户梦想的度假胜地。使用类似于“If you could visit one place in the world, where would you go?”的提示,并编写一个打印调查结果的代码块。

    第8章 函数

    8-1 消息:编写一个名为 display_message()的函数,它打印一个句子,指出你在本章学的是什么。调用这个函数,确认显示的消息正确无误。

    8-2 喜欢的图书:编写一个名为 favorite_book()的函数,其中包含一个名为 title的形参。这个函数打印一条消息,如 One of my favorite books is Alice in Wonderland。调用这个函数,并将一本图书的名称作为实参传递给它。

    8-3 T 恤:编写一个名为 make_shirt()的函数,它接受一个尺码以及要印到 T 恤上的字样。这个函数应打印一个句子,概要地说明 T 恤的尺码和字样。使用位置实参调用这个函数来制作一件 T 恤;再使用关键字实参来调用这个函数。

    8-4 大号 T 恤:修改函数 make_shirt(),使其在默认情况下制作一件印有字样“I love Python”的大号 T 恤。调用这个函数来制作如下 T 恤:一件印有默认字样的大号 T 恤、一件印有默认字样的中号 T 恤和一件印有其他字样的 T 恤(尺码无关紧要)。

    8-5 城市:编写一个名为 describe_city()的函数,它接受一座城市的名字以及该城市所属的国家。这个函数应打印一个简单的句子,如 Reykjavik is in Iceland。给用于存储国家的形参指定默认值。为三座不同的城市调用这个函数,且其中至少有一座城市不属于默认国家。

    8-6 城市名:编写一个名为 city_country()的函数,它接受城市的名称及其所属的国家。这个函数应返回一个格式类似于下面这样的字符串:"Santiago, Chile"至少使用三个城市国家对调用这个函数,并打印它返回的值。

    8-7 专辑:编写一个名为 make_album()的函数,它创建一个描述音乐专辑的字典。这个函数应接受歌手的名字和专辑名,并返回一个包含这两项信息的字典。使用这个函数创建三个表示不同专辑的字典,并打印每个返回的值,以核实字典正确地存储了专辑的信息。
    给函数 make_album()添加一个可选形参,以便能够存储专辑包含的歌曲数。如果调用这个函数时指定了歌曲数,就将这个值添加到表示专辑的字典中。调用这个函数,并至少在一次调用中指定专辑包含的歌曲数。

    8-8 用户的专辑:在为完成练习 8-7 编写的程序中,编写一个 while 循环,让用户输入一个专辑的歌手和名称。获取这些信息后,使用它们来调用函数 make_album(),并将创建的字典打印出来。在这个 while 循环中,务必要提供退出途径。

    8-9 魔术师:创建一个包含魔术师名字的列表,并将其传递给一名为show_magicians()的函数,这个函数打印列表中每个魔术师的名字。

    8-10 了不起的魔术师:在你为完成练习 8-9 而编写的程序中,编写一个名为make_great()的函数,对魔术师列表进行修改,在每个魔术师的名字中都加入字样“the Great”。调用函数show_magicians(),确认魔术师列表确实变了。

    8-11 不变的魔术师:修改你为完成练习 8-10 而编写的程序,在调用函make_great()时,向它传递魔术师列表的副本。由于不想修改原始列表,请返回修改后的列表,并将其存储到另一个列表中。分别使用这两个列表来调用 show_magicians(),确认一个列表包含的是原来的魔术师名字,而另一个列表包含的是添加了字样“the Great”的魔术师名字。

    8-12 三明治:编写一个函数,它接受顾客要在三明治中添加的一系列食材。这个函数只有一个形参(它收集函数调用中提供的所有食材),并打印一条消息,对顾客点的三明治进行概述。调用这个函数三次,每次都提供不同数量的实参。

    8-13 用户简介:复制前面的程序 user_profile.py,在其中调用 build_profile()来创建有关你的简介;调用这个函数时,指定你的名和姓,以及三个描述你的键值对。

    8-14 汽车:编写一个函数,将一辆汽车的信息存储在一个字典中。这个函数总是接受制造商和型号,还接受任意数量的关键字实参。这样调用这个函数:提供必不可少的信息,以及两个名称—值对,如颜色和选装配件。这个函数必须能够像下面这样进行调用:car = make_car(‘subaru’, ‘outback’, color=‘blue’, tow_package=True)打印返回的字典,确认正确地处理了所有的信息。

    8-15 打印模型:将示例print_models.py中的函数放在另一个名为printing_functions.py的文件中;在print_models.py的开头编写一条import语句,并修改这个文件以使用导入的函数。

    第9章 类

    9-1 餐馆:创建一个名为 Restaurant 的类,其方法__init__()设置两个属性:restaurant_name 和 cuisine_type。创建一个名为 describe_restaurant()的方法和一个名为 open_restaurant()的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。
    根据这个类创建一个名为 restaurant 的实例,分别打印其两个属性,再调用前述两个方法。

    9-2 三家餐馆:根据你为完成练习 9-1 而编写的类创建三个实例,并对每个实例调用方法 describe_restaurant()。

    9-3 用户:创建一个名为 User 的类,其中包含属性 first_name 和 last_name,还有用户简介通常会存储的其他几个属性。在类 User 中定义一个名为 describe_user()的方法,它打印用户信息摘要;再定义一个名为 greet_user()的方法,它向用户发出个性化的问候。
    创建多个表示不同用户的实例,并对每个实例都调用上述两个方法。

    9-4 就餐人数:在为完成练习 9-1 而编写的程序中,添加一个名为 number_served的属性,并将其默认值设置为 0。根据这个类创建一个名为 restaurant 的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。
    添加一个名为 set_number_served()的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
    添加一个名为 increment_number_served()的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。

    9-5 尝试登录次数:在为完成练习 9-3 而编写的 User 类中,添加一个名为login_attempts 的属性。编写一个名为 increment_login_attempts()的方法,它将属性login_attempts 的值加 1。再编写一个名为 reset_login_attempts()的方法,它将属性login_attempts 的值重置为 0。
    根据 User 类创建一个实例,再调用方法 increment_login_attempts()多次。打印属性login_attempts 的值,确认它被正确地递增;然后,调用方法 reset_login_attempts(),并再次打印属性 login_attempts 的值,确认它被重置为 0。

    9-6 冰淇淋小店:冰淇淋小店是一种特殊的餐馆。编写一个名为 IceCreamStand 的类,让它继承你为完成练习 9-1 或练习 9-4 而编写的 Restaurant 类。这两个版本的Restaurant 类都可以,挑选你更喜欢的那个即可。添加一个名为 flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写一个显示这些冰淇淋的方法。创建一个IceCreamStand 实例,并调用这个方法。

    9-7 管理员:管理员是一种特殊的用户。编写一个名为 Admin 的类,让它继承你为完成练习 9-3 或练习 9-5 而编写的 User 类。添加一个名为 privileges 的属性,用于存储一个由字符串(如"can add post"、 “can delete post”、 "can ban user"等)组成的列表。编写一个名为 show_privileges()的方法,它显示管理员的权限。创建一个 Admin实例,并调用这个方法。

    9-8 权限:编写一个名为 Privileges 的类,它只有一个属性——privileges,其中存储了练习 9-7 所说的字符串列表。将方法 show_privileges()移到这个类中。在 Admin类中,将一个 Privileges 实例用作其属性。创建一个 Admin 实例,并使用方法show_privileges()来显示其权限。

    9-9 电瓶升级:在本节最后一个electric_car.py版本中,给Battery类添加一个名为upgrade_battery()的方法。这个方法检查电瓶容量,如果它不是85,就将它设置为85。创建一辆电瓶容量为默认值的电动车,调用方法get_range(),然后对电瓶进行升级,并再次调用get_range()。你会看到这辆汽车的续航里程增加了。

    9-10 导入 Restaurant 类:将最新的 Restaurant 类存储在一个模块中。在另一个文件中,导入 Restaurant 类,创建一个 Restaurant 实例,并调用 Restaurant 的一个方法,以确认 import 语句正确无误。

    9-11 导入 Admin 类:以为完成练习 9-8 而做的工作为基础,将 User、 Privileges 和Admin 类存储在一个模块中,再创建一个文件,在其中创建一个 Admin 实例并对其调用方法 show_privileges(),以确认一切都能正确地运行。

    9-12 多个模块:将 User 类存储在一个模块中,并将 Privileges 和 Admin 类存储在另一个模块中。再创建一个文件,在其中创建一个 Admin 实例,并对其调用方法show_privileges(),以确认一切都依然能够正确地运行。

    9-13 使用 OrderedDict: 在练习 6-4 中,你使用了一个标准字典来表示词汇表。请使用 OrderedDict 类来重写这个程序,并确认输出的顺序与你在字典中添加键—值对的顺序一致。

    9-14 骰子:模块 random 包含以各种方式生成随机数的函数,其中的 randint()返回一个位于指定范围内的整数,例如,下面的代码返回一个 1~6 内的整数:

    from random import randint
    = randint(16)

    请创建一个 Die 类,它包含一个名为 sides 的属性,该属性的默认值为 6。编写一个名为 roll_die()的方法,它打印位于 1 和骰子面数之间的随机数。创建一个 6 面的骰子,再掷 10 次。
    创建一个 10 面的骰子和一个 20 面的骰子,并将它们都掷 10 次。

    第10章 文件和异常

    10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的 Python 知识,其中每一行都以“In Python you can”打头。将这个文件命名为learning_python.txt,并将其存储到为完成本章练习而编写的程序所在的目录中。编写一个程序,它读取这个文件,并将你所写的内容打印三次:第一次打印时读取整个文件;第二次打印时遍历文件对象;第三次打印时将各行存储在一个列表中,再在 with 代码块外打印它们。

    10-2 C 语言学习笔记:可使用方法 replace()将字符串中的特定单词都替换为另一个单词。下面是一个简单的示例,演示了如何将句子中的’dog’替换为’cat’:
    >>> message = “I really like dogs.”
    >>> message.replace(‘dog’, ‘cat’)
    ‘I really like cats.’
    读取你刚创建的文件 learning_python.txt 中的每一行,将其中的 Python 都替换为另一门语言的名称,如 C。将修改后的各行都打印到屏幕上。

    10-3 访客:编写一个程序,提示用户输入其名字;用户作出响应后,将其名字写入到文件 guest.txt 中。

    10-4 访客名单:编写一个 while 循环,提示用户输入其名字。用户输入其名字后,在屏幕上打印一句问候语,并将一条访问记录添加到文件 guest_book.txt 中。确保这个文件中的每条记录都独占一行。

    10-5 关于编程的调查:编写一个 while 循环,询问用户为何喜欢编程。每当用户输入一个原因后,都将其添加到一个存储所有原因的文件中。

    10-6 加法运算:提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数字。在这种情况下,当你尝试将输入转换为整数时,将引发 TypeError 异常。编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。在用户输入的任何一个值不是数字时都捕获 TypeError 异常,并打印一条友好的错误消息。对你编写的程序进行测试:先输入两个数字,再输入一些文本而不是数字。

    10-7 加法计算器:将你为完成练习 10-6 而编写的代码放在一个 while 循环中,让用户犯错(输入的是文本而不是数字)后能够继续输入数字。

    10-8 猫和狗:创建两个文件 cats.txt 和 dogs.txt,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字。编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。将这些代码放在一个 try-except 代码块中,以便在文件不存在时捕获 FileNotFound 错误,并打印一条友好的消息。将其中一个文件移到另一个地方,并确认 except 代码块中的代码将正确地执行。

    10-9 沉默的猫和狗:修改你在练习 10-8 中编写的 except 代码块,让程序在文件不存在时一言不发。

    10-11 喜欢的数字:编写一个程序,提示用户输入他喜欢的数字,并使用json.dump()将这个数字存储到文件中。再编写一个程序,从文件中读取这个值,并打印消息“I know your favourite number! It’s _____.”。

    10-12 记住喜欢的数字:将练习 10-11 中的两个程序合而为一。如果存储了用户喜欢的数字,就向用户显示它,否则提示用户输入他喜欢的数字并将其存储到文件中。运行这个程序两次,看看它是否像预期的那样工作。

    10-13 验证用户:最后一个remember_me.py版本假设用户要么已输入其用户名,要么是首次运行该程序。我们应修改这个程序,以应对这样的情形;当前和最后一次运行该程序的用户并非同一个人。
    为此,在greet_user()中打印欢迎用户回来的消息前,先询问他用户名是否是对的。如果不对,就调用get_new_username()让用户输入正确的用户名。

    第11章 测试代码

    11-1 城市和国家:编写一个函数,它接受两个形参:一个城市名和一个国家名。这个函数返回一个格式为 City, Country 的字符串,如 Santiago, Chile。将这个函数存储在一个名为 city _functions.py 的模块中。

    创建一个名为 test_cities.py 的程序,对刚编写的函数进行测试(别忘了,你需要导入模块 unittest 以及要测试的函数)。编写一个名为 test_city_country()的方法,核实使用类似于’santiago’和’chile’这样的值来调用前述函数时,得到的字符串是正确的。运行 test_cities.py,确认测试 test_city_country()通过了。

    11-2 人口数量:修改前面的函数,使其包含第三个必不可少的形参 population,并返回一个格式为 City, Country – population xxx 的字符串,如 Santiago, Chile – population 5000000。运行 test_cities.py,确认测试 test_city_country()未通过。
    修改上述函数,将形参 population 设置为可选的。再次运行 test_cities.py,确认测试 test_city_country()又通过了。
    再编写一个名为 test_city_country_population()的测试,核实可以使用类似于‘santiago’、 'chile’和’population=5000000’这样的值来调用这个函数。再次运行test_cities.py,确认测试 test_city_country_population()通过了。

    11-3 雇员:编写一个名为 Employee 的类,其方法__init__()接受名、姓和年薪,并将它们都存储在属性中。编写一个名为 give_raise()的方法,它默认将年薪增加 5000美元,但也能够接受其他的年薪增加量。
    为 Employee 编写一个测试用例,其中包含两个测试方法: test_give_default_raise()和 test_give_custom_raise()。使用方法 setUp(),以免在每个测试方法中都创建新的雇员实例。运行这个测试用例,确认两个测试都通过了。

    第18~19章 Django

    18-2  简短的条目 :当前, Django 在管理网站或 shell 中显示 Entry 实例时,模型Entry 的方法 __str__() 都在它的末尾加上省略号。请在方法 __str__() 中添加一条 if 语句,以便仅在条目长度超过 50 字符时才添加省略号。使用管理网站来添加一个长度少于 50 字符的条目,并核实显示它时没有省略号。
    18-4  比萨店 :新建一个名为 pizzeria 的项目,并在其中添加一个名为 pizzas 的应用程序。定义一个名为 Pizza 的模型,它包含字段 name ,用于存储比萨名称,如 Hawaiian 和 Meat Lovers 。定义一个名为 Topping 的模型,它包含字段 pizza和 name ,其中字段 pizza 是一个关联到 Pizza 的外键,而字段 name 用于存储配料,如 pineapple 、 Canadian bacon 和 sausage 。
    向管理网站注册这两个模型,并使用管理网站输入一些比萨名和配料。使用 shell 来查看你输入的数据。

    18-5  膳食规划程序 :假设你要创建一个应用程序,帮助用户规划一周的膳食。为此,创建一个文件夹,并将其命名为meal_planner,再这个文件夹中新建一个Django项目。接下来,新建一个名为meal_plans的应用程序,并为这个项目创建一个简单的主页。
    18-6  比萨店主页 :在你为完成练习 18-4 而创建的项目 Pizzeria 中,添加一个主页。

    18-7  模版文档 :浏览django模板文档,https://docs.djangoproject.com/en/1.8/ref/templates。自己开发项目时,可回头参考该文档。
    18-8  比萨店页面 :在练习 18-6 中开发的项目 Pizzeria 中添加一个页面,它显示供应的比萨的名称。然后,将每个比萨名称都设置成一个链接,单击这种链接将显示一个页面,其中列出了相应比萨的配料。请务必使用模板继承来高效地创建页面。

    19-1 博客 :新建一个 Django 项目,将其命名为 Blog 。在这个项目中,创建一个名为 blogs 的应用程序,并在其中创建一个名为 BlogPost 的模型。这个模型应包含 title 、 text 和 date_added 等字段。为这个项目创建一个超级用户,并使用管理网站创建几个简短的帖子。创建一个主页,在其中按时间顺序显示所有的帖子。
    创建两个表单,其中一个用于发布新帖子,另一个用于编辑既有的帖子。
    尝试填写这些表单,确认它们能够正确地工作。
    19-2 博客账户 :在你为完成练习 19-1 而开发的项目 Blog 中,添加一个用户身份验证和注册系统。让已登录的用户在屏幕上看到其用户名,并让未注册的用户看到一个到注册页面的链接。
    19-3 重构 :在 views.py 中,我们在两个地方核实主题关联到的用户为当前登录的用户。请将执行这种检查的代码放在一个名为 check_topic_owner() 的函数中,并在恰当的地方调用这个函数。
    19-4 保护页面 new_entry :一个用户可在另一个用户的学习笔记中添加条目,方法是输入这样的 URL ,即其中包含输入另一个用户的主题的 ID 。为防范这种攻击,请在保存新条目前,核实它所属的主题归当前用户所有。
    19-5 受保护的博客 :在你创建的项目 Blog 中,确保每篇博文都与特定用户相关联。确保任何用户都可访问所有的博文,但只有已登录的用户能够发表博文以及编辑既有博文。在让用户能够编辑其博文的视图中,在处理表单前确认用户编辑的是他自己发表的博文。

    20-1  其他表单 :我们对登录页面和 add_topic 页面应用了 Bootstrap 样式。请对其他基于表单的页面做类似的修改: new_entry 页面、 edit_entry 页面和注册页面。
    20-2  设置博客的样式 :对于你在第 19 章创建的项目 Blog ,使用 Bootstrap 来设置其样式。
    20-3  在线博客 :将你一直在开发的项目 Blog 部署到 Heroku 。确保将 DEBUG 设置为 False ,并修改设置 ALLOWED_HOSTS ,让部署相当安全。
    20-4  在更多的情况下显示 404 错误页面 :在视图函数 new_entry() 和 edit_entry() 中,也使用函数 get_object_or_404() 。完成这些修改后进行测试:输入类似于 http://localhost:8000/new_entry/99999/ 的 URL ,确认你能够看到 404 错误页面。
    20-5  扩展 “ 学习笔记 ”  :在 “ 学习笔记 ” 中添加一项功能,将修改推送到在线部署。尝试做一项简单的修改,如在主页中对项目作更详细的描述;再尝试添加一项更高级的功能,如让用户能够将主题设置为公开的。为此,需要在模型 Topic 中添加一个名为 public 的属性(其默认值为 False ),并在 new_topic 页面中添加一个表单元素,让用户能够将私有主题改为公开的。然后,你需要迁移项目,并修改 views.py ,让未登录的用户也可以看到所有公开的主题。将修改推送到 Heroku 后,别忘了迁移在线数据库。

  • 相关阅读:
    Leetcode 16.25 LRU缓存 哈希表与双向链表的组合
    Leetcode437 路径总和 III 双递归与前缀和
    leetcode 0404 二叉树检查平衡性 DFS
    Leetcode 1219 黄金矿工 暴力回溯
    Leetcode1218 最长定差子序列 哈希表优化DP
    Leetcode 91 解码方法
    Leetcode 129 求根到叶子节点数字之和 DFS优化
    Leetcode 125 验证回文串 双指针
    Docker安装Mysql记录
    vmware虚拟机---Liunx配置静态IP
  • 原文地址:https://www.cnblogs.com/CSgarcia/p/13292498.html
Copyright © 2011-2022 走看看