测试知识:part ii 练习 | 第二部分 类型与操作 —— 第 9 章: 元组,文件和其他 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-380玩彩网官网入口

未匹配的标注

这堂课要求你使用内置对象的基础来实践。和之前一样,在此过程中有一些新概念可能会突然出现,所以当完成时(或者甚至即使没有完成时)确保直接转到附录d的答案。如果时间有限,建议从练习10和11开始(它们是这堆练习中最实用的),且当时间允许时再从头到尾完成。这全是基础材料,所以尽可能完成更多;编程是需要实践的活动,没有什么可以替代练习来巩固学到的知识。

  1. 基础。交互式地实验在本书这部分各种操作报告中发现的常见类型操作。首先,启动python交互式解释器,键入下面的每个表达式,然后努力解释在每个例子中发生的事情。注意在其中一些例子中的分号被用作语句分隔符(将多行语句压缩为单行):比如,x=1;x 赋值然后打印了变量(在本书的下一部分参阅更多语句的语法)。还要记住表达式之间的逗号通常构建了元组(即使没有包裹的小括号):x,y,z是一个三项的元组,python将其包裹在小括号中打印显示出来。

    2 ** 16
    2 / 5, 2 / 5.0
    "spam"   "eggs"
    s = "ham"
    "eggs "   s
    s * 5
    s[:0]
    "green %s and %s" % ("eggs", s)
    'green {0} and {1}'.format('eggs', s)
    ('x',)[0]
    ('x', 'y')[1]
    l = [1,2,3]   [4,5,6]
    l, l[:], l[:0], l[−2], l[−2:]
    ([1,2,3]   [4,5,6])[2:4]
    [l[2], l[3]]
    l.reverse(); l
    l.sort(); l
    l.index(4)
    {'a':1, 'b':2}['b']
    d = {'x':1, 'y':2, 'z':3}
    d['w'] = 0
    d['x']   d['w']
    d[(1,2,3)] = 4
    list(d.keys()), list(d.values()), (1,2,3) in d
    [[]], ["",[],(),{},none]
  2. 索引和切片。在交互式提示符处,定义名为l的列表,它包含了4个字符串或数字(比如:l = [0,1,2,3])。然后,使用下面的边界情况来做实验。在真实程序中可能从不会看到这些情况(特别不会像这里出现的那么诡异!),但它们旨在让你思考底层的模型,且有一些在不那么人为的形式中可能会有用——比如,如果序列和你预料的一样长,那么边界外切片会有所帮助:

    • 当你尝试在边界外索引会发生什么(比如:l[4])?
    • 那在边界外切片呢?(比如:l[-1000:100])?
    • 最后,如果尝试逆序提取一个序列,下边界大于上边界(比如:l[3:1]),python会如何处理它呢?提示:尝试对这个切片赋值(l[3:1]=['?']),然后看一下这个值被放在哪?你认为这可能是当在边界外切片时的同样现象吗?
  3. 索引,切片,删除。定义另一个有4个项的列表,然后把一个空列表分配给它的偏移量之一(比如:l[2]=[])。发生了什么?然后把空列表分配给一个切片(l[2:3]=[])。现在发生了什么?回忆下:给切片赋值删除了切片,然后把新的值插入切片原来所在的位置。
    del语句删除偏移量、键、属性和名称。使用在列表上来删除一项(比如:del l[0])。如果删除整个切片(del l[1:])会发生什么?当把非序列分配给切片时(l[1:2]=1)会发生什么?

  4. 元组赋值。键入下面的行:

    >>> x = 'spam'
    >>> y = 'eggs'
    >>> x, y = y, x

    当键入这个序列时,你认为会有什么发生在 x 和 y 身上?

  5. 字典键。考虑下面的代码片段:

    >>> d = {}
    >>> d[1] = 'a'
    >>> d[2] = 'b'

    已经学习了字典不能被偏移量访问,所以这里会发生什么?下面会对这个主题有所启示吗?(提示:字符串、整数、元组共享什么类型属性?)

    >>> d[(1, 2, 3)] = 'c'
    >>> d
    {1: 'a', 2: 'b', (1, 2, 3): 'c'}
  6. 字典索引。创建一个名为d,有三个条目(键为'a', 'b', 'c')的字典。如果尝试索引一个不存在的键(d['d'])会发生什么?如果尝试分配一个不存在的键'd'(比如:d['d'] = 'spam'),python会做什么?这个和列表的边界外赋值、引用相比较如何?这听起来像不像变量名的规则?

  7. 通用操作。运行交互式的测试来回答下面的问题:

    • 当尝试对不同/混合类型使用 操作符时会发生什么(比如:字符串 列表,列表 元组)?
    • 当运算对象之一是字典是 是否有效?
    • append 方法是否同时适合列表和字符串?在列表上使用 keys 方法会如何?(提示:append对其主体对象做了什么假设?)
    • 最后,当对两个列表或两个字符串进行切片或连接时,得到的是什么类型的对象?
  8. 字符串索引。定义4个字符的字符串:s = "spam"。然后键入下面的表达式:s[0][0][0][0][0]。关于这次正在发生什么有什么思路吗?(提示:回忆下:字符串是字符集,但python的字符是单字符的字符串。)如果将这个表达式应用到如['s', 'p', 'a', 'm']的列表,它是否还有效?为什么?

  9. 不可变类型。再次定义一个4个字符的字符串:s = "spam"。编写一个赋值语句,只使用切片和连接,修改字符串为"slam"。能只使用索引和连接来执行同样的操作吗?索引赋值可以吗?

  10. 嵌套。编写一个数据结构来表示你的个人信息:名字(first, middle, last),年龄,工作,地址,电子邮件地址和电话。可以使用你喜欢的任何类型对象类型(列表、元组、字典、字符串,数字)的组合来构建这个数据结构。然后,通过索引访问这个数据结构的每个部分。对这个对象,一些结构是否比其它的更有意义?

  11. 文件。编写一个脚本,创建新的名为myfile.txt的输出文件,并把字符串"hello file world!"写进去。然后编写另一个脚本,打开myfile.txt然后读取并打印其内容。从系统命令行运行这两个脚本。当运行脚本时,这个新文件出现在当前目录了吗?如果给传入open的文件名添加一个不同目录路径会如何?注意:文件的write方法(默认)不会添加换行符到字符串中;如果想要完全地终结在文件中的这行,在字符串末尾添加上一个明确的\n

本文章首发在 380玩彩网官网入口 网站上。

上一篇
讨论数量: 0



暂无话题~
网站地图