您正在查看: Python 分类下的文章

习题 40: 字典, 可爱的字典

习题 40: 字典, 可爱的字典

接下来我要教你另外一种让你伤脑筋的容器型数据结构,因为一旦你学会这种容器,你将拥有超酷的能力。这是最有用的容器:字典(dictionary)。

python 将这种数据类型叫做 “dict”,有的语言里它的名称是 “hash”。这两种名字我都会用到,不过这并不重要,重要的是它们和列表的区别。你看,针对列表你可以做这样的事情:

>>> things = ['a', 'b', 'c', 'd']
>>> print things[1]
b
>>> things[1] = 'z'
>>> print things[1]
z
>>> print things
['a', 'z', 'c', 'd']
>>>

你可以使用数字作为列表的索引,也就是你可以通过数字找到列表中的元素。而 dict 所作的,是让你可以通过任何东西找到元素,不只是数字。是的,字典可以将一个物件和另外一个东西关联,不管它们的类型是什么,我们来看看:

>>> stuff = {'name': 'Zed', 'age': 36, 'height': 6*12+2}
>>> print stuff['name']
Zed
>>> print stuff['age']
36
>>> print stuff['height']
74
>>> stuff['city'] = "San Francisco"
>>> print stuff['city']
San Francisco
>>>

你将看到除了通过数字以外,我们还可以用字符串来从字典中获取 stuff ,我们还可以用字符串来往字典中添加元素。当然它支持的不只有字符串,我们还可以做这样的事情:

>>> stuff[1] = "Wow"
>>> stuff[2] = "Neato"
>>> print stuff[1]
Wow
>>> print stuff[2]
Neato
>>> print stuff
{'city': 'San Francisco', 2: 'Neato',
 'name': 'Zed', 1: 'Wow', 'age': 36,
 'height': 74}
>>>

在这里我使用了两个数字。其实我可以使用任何东西,不过这么说并不准确,不过你先这么理解就行了。

当然了,一个只能放东西进去的字典是没啥意思的,所以我们还要有删除物件的方法,也就是使用 del 这个关键字:

>>> del stuff['city']
>>> del stuff[1]
>>> del stuff[2]
>>> stuff
{'name': 'Zed', 'age': 36, 'height': 74}
>>>

接下来我们要做一个练习,你必须非常仔细,我要求你将这个练习写下来,然后试着弄懂它做了些什么。这个练习很有趣,做完以后你可能会有豁然开朗的感觉。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cities = {'CA': 'San Francisco', 'MI': 'Detroit',
'FL': 'Jacksonville'}

cities['NY'] = 'New York'
cities['OR'] = 'Portland'

def find_city(themap, state):
if state in themap:
return themap[state]
else:
return "Not found."

ok pay attention!

cities['_find'] = find_city

while True:
print "State? (ENTER to quit)",
state = raw_input("> ")

if not state: break

this line is the most important ever! study!

city_found = cities['_find'](cities, state)
print city_found

Warning

注意到我用了 themap 而不是 map 了吧?这是因为 python 已经有一个函数称作 map 了,所以如果你用 map 做变量名,你后面可能会碰到问题。

你应该看到的结果

$ python ex40.py 
State? (ENTER to quit) > CA
San Francisco
State? (ENTER to quit) > FL
Jacksonville
State? (ENTER to quit) > O
Not found.
State? (ENTER to quit) > OR
Portland
State? (ENTER to quit) > VT
Not found.
State? (ENTER to quit) >

加分习题

  • 在 Python 文档中找到 dictionary (又被称作 dicts, dict)的相关的内容,学着对 dict 做更多的操作。
  • 找出一些 dict 无法做到的事情。例如比较重要的一个就是 dict 的内容是无序的,你可以检查一下看看是否真是这样。
  • 试着把 for-loop 执行到 dict 上面,然后试着在 for-loop 中使用 dict 的 items() 函数,看看会有什么样的结果。
  • Project Versions

    Table Of Contents

    • 习题 40: 字典, 可爱的字典
      • 你应该看到的结果
      • 加分习题

    Previous topic

    习题 39: 列表的操作

    Next topic

    习题 41: 持剑的熊,密室

    This Page

    • Show Source

    Quick search

    Enter search terms or a module, class or function name.

    习题 41: 持剑的熊,密室

    习题 41: 持剑的熊,密室

    你在上一节中发现 dict 的秘密功能了吗?你可以解释给自己吗?让我来给你解释一下,顺便和你自己的理解对比看有什么不同。这里是我们要讨论的代码:

    cities['_find'] = find_city
    city_found = cities['_find'](cities, state)
    

    你要记住一个函数也可以作为一个变量,``def find_city`` 比如这一句创建了一个你可以在任何地方都能使用的变量。在这段代码里,我们首先把函数 find_city 放到叫做 cities 的字典中,并将其标记为 '_find'。 这和我们将州和市关联起来的代码做的事情一样,只不过我们在这里放了一个函数的名称。

    好了,所以一旦我们知道 find_city 是在字典中 _find 的位置,这就意味着我们可以去调用它。第二行代码可以分解成如下步骤:

  • python 看到 city_found = 于是知道了需要创建一个变量。
  • 然后它读到 cities ,然后知道了它是一个字典
  • 然后看到了 ['_find'] ,于是 python 就从索引找到了字典 cities 中对应的位置,并且获取了该位置的内容。
  • ['_find'] 这个位置的内容是我们的函数 find_city ,所以 Python 就知道了这里表示一个函数,于是当它碰到 ( 就开始了函数调用。
  • cities, state 这两个参数将被传递到函数 find_city 中,然后这个函数就被运行了。
  • find_city 接着从 cities 中寻找 states ,并且返回它找到的内容,如果什么都没找到,就返回一个信息说它什么都没找到。
  • Python find_city 接受返回的信息,最后将该信息赋值给一开始的 city_found 这个变量。
  • 我再教你一个小技巧。如果你倒着阅读的话,代码可能会变得更容易理解。让我们来试一下,一样是那行:

  • state 和 city 是...
  • 作为参数传递给...
  • 一个函数,位置在...
  • '_find' 然后寻找,目的地为...
  • cities 这个位置...
  • 最后赋值给 city_found.
  • 还有一种方法读它,这回是“由里向外”。

  • 找到表达式的中心位置,此次为 ['_find'].
  • 逆时针追溯,首先看到的是一个叫 cities 的字典,这样就知道了 cities 中的 _find 元素。
  • 上一步得到一个函数。继续逆时针寻找,看到的是参数。
  • 参数传递给函数后,函数会返回一个值。然后再逆时针寻找。
  • 最后,我们到了 city_found = 的赋值位置,并且得到了最终结果。
  • 数十年的编程下来,我在读代码的过程中已经用不到上面的三种方法了。我只要瞟一眼就知道它的意思了。甚至给我一整页的代码,我可以一眼瞄出里边的 bug 和错误。这样的技能是花了超乎常人的时间和精力才锻炼得来的。在磨练的过程中,我学会了下面三种读代码的方法,它们是用户几乎所有的编程语言

  • 从前向后。
  • 从后向前。
  • 逆时针方向。
  • 下次碰到难懂的语句时,你可以试试这三种方法。

    现在我们来写这次的练习,写完后再过一遍,这节习题其实挺有趣的。

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    from sys import exit
    from random import randint
    

    def death():
    quips = ["You died. You kinda suck at this.",
    "Your mom would be proud. If she were smarter.",
    "Such a luser.",
    "I have a small puppy that's better at this."]

    print quips[randint(0, len(quips)-1)]
    exit(1)

    def princess_lives_here():
    print "You see a beautiful Princess with a shiny crown."
    print "She offers you some cake."

    eat_it = raw_input("> ")

    if eat_it == "eat it":
    print "You explode like a pinata full of frogs."
    print "The Princess cackles and eats the frogs. Yum!"
    return 'death'

    elif eat_it == "do not eat it":
    print "She throws the cake at you and it cuts off your head."
    print "The last thing you see is her munching on your torso. Yum!"
    return 'death'

    elif eat_it == "make her eat it":
    print "The Princess screams as you cram the cake in her mouth."
    print "Then she smiles and cries and thanks you for saving her."
    print "She points to a tiny door and says, 'The Koi needs cake too.'"
    print "She gives you the very last bit of cake and shoves you in."
    return 'gold_koi_pond'

    else:
    print "The princess looks at you confused and just points at the cake."
    return 'princess_lives_here'

    def gold_koi_pond():
    print "There is a garden with a koi pond in the center."
    print "You walk close and see a massive fin poke out."
    print "You peek in and a creepy looking huge Koi stares at you."
    print "It opens its mouth waiting for food."

    feed_it = raw_input("> ")

    if feed_it == "feed it":
    print "The Koi jumps up, and rather than eating the cake, eats your arm."
    print "You fall in and the Koi shrugs than eats you."
    print "You are then pooped out sometime later."
    return 'death'

    elif feed_it == "do not feed it":
    print "The Koi grimaces, then thrashes around for a second."
    print "It rushes to the other end of the pond, braces against the wall..."
    print "then it lunges out of the water, up in the air and over your"
    print "entire body, cake and all."
    print "You are then pooped out a week later."
    return 'death'

    elif feed_it == "throw it in":
    print "The Koi wiggles, then leaps into the air to eat the cake."
    print "You can see it's happy, it then grunts, thrashes..."
    print "and finally rolls over and poops a magic diamond into the air"
    print "at your feet."

    return 'bear_with_sword'

    else:
    print "The Koi gets annoyed and wiggles a bit."
    return 'gold_koi_pond'

    def bear_with_sword():
    print "Puzzled, you are about to pick up the fish poop diamond when"
    print "a bear bearing a load bearing sword walks in."
    print '"Hey! That' my diamond! Where'd you get that!?"'
    print "It holds its paw out and looks at you."

    give_it = raw_input("> ")

    if give_it == "give it":
    print "The bear swipes at your hand to grab the diamond and"
    print "rips your hand off in the process. It then looks at"
    print 'your bloody stump and says, "Oh crap, sorry about that."'
    print "It tries to put your hand back on, but you collapse."
    print "The last thing you see is the bear shrug and eat you."
    return 'death'

    elif give_it == "say no":
    print "The bear looks shocked. Nobody ever told a bear"
    print "with a broadsword 'no'. It asks, "
    print '"Is it because it's not a katana? I could go get one!"'
    print "It then runs off and now you notice a big iron gate."
    print '"Where the hell did that come from?" You say.'

    return 'big_iron_gate'
    else:
    print "The bear look puzzled as to why you'd do that."
    return "bear_with_sword"

    def big_iron_gate():
    print "You walk up to the big iron gate and see there's a handle."

    open_it = raw_input("> ")

    if open_it == 'open it':
    print "You open it and you are free!"
    print "There are mountains. And berries! And..."
    print "Oh, but then the bear comes with his katana and stabs you."
    print '"Who's laughing now!? Love this katana."'

    return 'death'

    else:
    print "That doesn't seem sensible. I mean, the door's right there."
    return 'big_iron_gate'

    ROOMS = {
    'death': death,
    'princess_lives_here': princess_lives_here,
    'gold_koi_pond': gold_koi_pond,
    'big_iron_gate': big_iron_gate,
    'bear_with_sword': bear_with_sword
    }

    def runner(map, start):
    next = start

    while True:
    room = map[next]
    print "\n--------"
    next = room()

    runner(ROOMS, 'princess_lives_here')

    代码不少,不过还是从头写完吧。确认它能运行,然后玩一下看看。

    你应该看到的结果

    我玩起来时这样的,熊很酷:

    $ python ex41.py 
    

    You see a beautiful Princess with a shiny crown.
    She offers you some cake.

    make her eat it
    The Princess screams as you cram the cake in her mouth.
    Then she smiles and cries and thanks you for saving her.
    She points to a tiny door and says, 'The Koi needs cake too.'
    She gives you the very last bit of cake and shoves you in.


    There is a garden with a koi pond in the center.
    You walk close and see a massive fin poke out.
    You peek in and a creepy looking huge Koi stares at you.
    It opens its mouth waiting for food.

    throw it in
    The Koi wiggles, then leaps into the air to eat the cake.
    You can see it's happy, it then grunts, thrashes...
    and finally rolls over and poops a magic diamond into the air
    at your feet.


    Puzzled, you are about to pick up the fish poop diamond when
    a bear bearing a load bearing sword walks in.
    "Hey! That' my diamond! Where'd you get that!?"
    It holds its paw out and looks at you.

    say no
    The bear looks shocked. Nobody ever told a bear
    with a broadsword 'no'. It asks,
    "Is it because it's not a katana? I could go get one!"
    It then runs off and now you notice a big iron gate.
    "Where the hell did that come from?" You say.


    You walk up to the big iron gate and see there's a handle.

    open it
    You open it and you are free!
    There are mountains. And berries! And...
    Oh, but then the bear comes with his katana and stabs you.
    "Who's laughing now!? Love this katana."


    I have a small puppy that's better at this.
    $

    加分习题

  • 解释一下返回至下一个房间的工作原理。
  • 创建更多的房间,让游戏规模变大。
  • 除了让每个函数打印自己以外,试试学习一下“文档注解(doc comments)”。看看你能不能将房间描述写成文档注解,然后修改运行它的代码,让它把文档注解打印出来。
  • 一旦你用了文档注解作为房间描述,你还需要让这个函数打印出用户提示吗?试着让运行函数的代码打出用户提示来,然后将用户输入传递到各个函数。你的函数应该只是一些 if 语句组合,将结果打印出来,并且返回下一个房间。
  • 这其实是一个小版本的“有限状态机(finite state machine)”,找资料阅读了解一下,虽然你可能看不懂,但还是找来看看吧。
  • Project Versions

    Table Of Contents

    • 习题 41: 持剑的熊,密室
      • 你应该看到的结果
      • 加分习题

    Previous topic

    习题 40: 字典, 可爱的字典

    Next topic

    习题 42: 物以类聚

    This Page

    • Show Source

    Quick search

    Enter search terms or a module, class or function name.

    习题 37: 复习各种符号

    习题 37: 复习各种符号

    现在该复习你学过的符号和 python 关键字了,而且你在本节还会学到一些新的东西。我在这里所作的是将所有的 python 符号和关键字列出来,这些都是值得掌握的重点。

    在这节课中,你需要复习每一个关键字,从记忆中想起它的作用并且写下来,接着上网搜索它真正的功能。有些内容可能是无法搜索的,所以这对你可能有些难度,不过你还是需要坚持尝试。

    如果你发现记忆中的内容有误,就在索引卡片上写下正确的定义,试着将自己的记忆纠正过来。如果你就是不知道它的定义,就把它也直接写下来,以后再做研究。

    最后,将每一种符号和关键字用在程序里,你可以用一个小程序来做,也可以尽量多谢一些程序来巩固记忆。这里的关键点是明白各个符号的作用,确认自己没搞错,如果搞错了就纠正过来,然后将其用在程序里,并且通过这样的方式巩固自己的记忆。

    Keywords(关键字)

    • and
    • del
    • from
    • not
    • while
    • as
    • elif
    • global
    • or
    • with
    • assert
    • else
    • if
    • pass
    • yield
    • break
    • except
    • import
    • print
    • class
    • exec
    • in
    • raise
    • continue
    • finally
    • is
    • return
    • def
    • for
    • lambda
    • try

    数据类型

    针对每一种数据类型,都举出一些例子来,例如针对 string,你可以举出一些字符串,针对 number,你可以举出一些数字。

    • True
    • False
    • None
    • strings
    • numbers
    • floats
    • lists

    字符串转义序列(Escape Sequences)

    对于字符串转义序列,你需要再字符串中应用它们,确认自己清楚地知道它们的功能。

    • \\
    • \'
    • \"
    • \a
    • \b
    • \f
    • \n
    • \r
    • \t
    • \v

    字符串格式化(String Formats)

    一样的,在字符串中使用它们,确认它们的功能。

    • %d
    • %i
    • %o
    • %u
    • %x
    • %X
    • %e
    • %E
    • %f
    • %F
    • %g
    • %G
    • %c
    • %r
    • %s
    • %%

    操作符号

    有些操作符号你可能还不熟悉,不过还是一一看过去,研究一下它们的功能,如果你研究不出来也没关系,记录下来日后解决。

    • +
    • -
    • *
    • **
    • /
    • //
    • %
    • <
    • >
    • <=
    • >=
    • ==
    • !=
    • <>
    • ( )
    • [ ]
    • { }
    • @
    • ,
    • :
    • .
    • =
    • ;
    • +=
    • -=
    • *=
    • /=
    • //=
    • %=
    • **=

    花一个星期学习这些东西,如果你能提前完成就更好了。我们的目的是覆盖到所有的符号 类型,确认你已经牢牢记住它们。另外很重要的一点是这样你可以找出自己还不知道哪些 东西,为自己日后学习找到一些方向。

    Project Versions

    Table Of Contents

    • 习题 37: 复习各种符号
      • Keywords(关键字)
      • 数据类型
      • 字符串转义序列(Escape Sequences)
      • 字符串格式化(String Formats)
      • 操作符号

    Previous topic

    习题 36: 设计和调试

    Next topic

    习题 38: 阅读代码

    This Page

    • Show Source

    Quick search

    Enter search terms or a module, class or function name.

    习题 34: 访问列表的元素

    习题 34: 访问列表的元素

    列表的用处很大,但只有你能访问里边的内容时它才能发挥出作用来。你已经学会了按顺序读出列表的内容,但如果你要得到第 5 个元素该怎么办呢?你需要知道如何访问列表中的元素。访问第一个元素的方法是这样的:

    animals = ['bear', 'tiger', 'penguin', 'zebra']
    bear = animals[0]
    

    你定义一个 animals 的列表,然后你用 0 来获取第一个元素?! 这是怎么回事啊?因为数学里边就是这样,所以 python 的列表也是从 0 开始的。虽然看上去很奇怪,这样定义其实有它的好处,而且实际上设计成 0 或者 1 开头其实都可以,

    最好的解释方式是将你平时使用数字的方式和程序员使用数字的方式做对比。

    假设你在观看上面列表中的四种动物(['bear', 'tiger', 'penguin', 'zeebra']) 的赛跑,而它们比赛的名词正好跟列表里的次序一样。这是一场很激动人心的比赛,因为这些动物没打算吃掉对方,而且比赛还真的举办起来了。结果你的朋友来晚了,他想知道谁赢了比赛,他会问你“嘿,谁是第 0 名”吗?不会的,他会问“嘿,谁是第 1 名?”

    这是因为动物的次序是很重要的。没有第一个就没有第二个,没有第二个也没有第三个。第零个是不存在的,因为零的意思是什么都没有。“什么都没有”怎么赢比赛嘛,完全不合逻辑。这样的数字我们称之为“序数(ordinal number)”,因为它们表示的是事物的顺序。

    而程序员不能用这种方式思考问题,因为他们可以从列表的任何一个位置取出一个元素来。对程序员来说,上述的列表更像是一叠卡片。如果他们想要 tiger,就抓它出来,如果想要zeebra,也一样抓取出来。要随机地抓取列表里的内容,列表的每一个元素都应该有一个地址,或者一个 “index(索引)”,而最好的方式是使用以 0 开头的索引。相信我说的这一点吧,这种方式获取元素会更容易。这类的数字被称为“基数(cardinal number)”,它意味着你可以任意抓取元素,所以我们需要一个 0 号元素。

    那么,这些知识对于你的列表操作有什么帮助呢?很简单,每次你对自己说“我要第 3 只动物”时,你需要将“序数”转换成“基数”,只要将前者减 1 就可以了。第 3 只动物的索引是 2,也就是 penguin。由于你一辈子都在跟序数打交道,所以你需要用这种方式来获得基数,只要减 1 就都搞定了。

    记住: ordinal == 有序,以 1 开始;cardinal == 随机选取, 以 0 开始。

    让我们练习一下。定义一个动物列表,然后跟着做后面的练习,你需要写出所指位置的动物名称。如果我用的是“1st, 2nd”等说法,那说明我用的是序数,所以你需要减去 1。如果我给你的是基数(0, 1, 2),你只要直接使用即可。 .. code-block:: python

    animals = [‘bear’, ‘python’, ‘peacock’, ‘kangaroo’, ‘whale’, ‘platypus’]

  • The animal at 1.
  • The 3rd animal.
  • The 1st animal.
  • The animal at 3.
  • The 5th animal.
  • The animal at 2.
  • The 6th animal.
  • The animal at 4.
  • 对于上述每一条,以这样的格式写出一个完整的句子:“The 1st animal is at 0 and is a bear.” 然后倒过来念:“The animal at 0 is the 1st animal and is a bear.”

    使用 python 检查你的答案。

    加分习题

  • 上网搜索一下关于序数(ordinal number)和基数(cardinal number)的知识并阅读一下。
  • 以你对于这些数字类型的了解,解释一下为什么今年是 2010 年。提示:你不能随便挑选年份。
  • 再写一些列表,用一样的方式作出索引,确认自己可以在两种数字之间互相翻译。
  • 使用 python 检查自己的答案。
  • Warning

    会有程序员告诉你让你去阅读一个叫“Dijkstra”的人写的关于数字的话题。我建议你还是不读为妙。除非你喜欢听一个在编程这一行刚兴起时就停止从事编程了的人对你大喊大叫。

    Project Versions

    Table Of Contents

    • 习题 34: 访问列表的元素
      • 加分习题

    Previous topic

    习题 33: While 循环

    Next topic

    习题 35: 分支和函数

    This Page

    • Show Source

    Quick search

    Enter search terms or a module, class or function name.

    习题 35: 分支和函数

    习题 35: 分支和函数

    你已经学会了 if 语句、函数、还有数组(array)。现在你要练习扭转一下思维了。把下面的代码写下来,看你是否能弄懂它实现的是什么功能。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    from sys import exit
    

    def gold_room():
    print "This room is full of gold. How much do you take?"

    next = raw_input("> ")
    if "0" in next or "1" in next:
    how_much = int(next)
    else:
    dead("Man, learn to type a number.")

    if how_much < 50:
    print "Nice, you're not greedy, you win!"
    exit(0)
    else:
    dead("You greedy bastard!")

    def bear_room():
    print "There is a bear here."
    print "The bear has a bunch of honey."
    print "The fat bear is in front of another door."
    print "How are you going to move the bear?"
    bear_moved = False

    while True:
    next = raw_input("> ")

    if next == "take honey":
    dead("The bear looks at you then pimp slaps your face off.")
    elif next == "taunt bear" and not bear_moved:
    print "The bear has moved from the door. You can go through it now."
    bear_moved = True
    elif next == "taunt bear" and bear_moved:
    dead("The bear gets pissed off and chews your crotch off.")
    elif next == "open door" and bear_moved:
    gold_room()
    else:
    print "I got no idea what that means."

    def cthulu_room():
    print "Here you see the great evil Cthulu."
    print "He, it, whatever stares at you and you go insane."
    print "Do you flee for your life or eat your head?"

    next = raw_input("> ")

    if "flee" in next:
    start()
    elif "head" in next:
    dead("Well that was tasty!")
    else:
    cthulu_room()

    def dead(why):
    print why, "Good job!"
    exit(0)

    def start():
    print "You are in a dark room."
    print "There is a door to your right and left."
    print "Which one do you take?"

    next = raw_input("> ")

    if next == "left":
    bear_room()
    elif next == "right":
    cthulu_room()
    else:
    dead("You stumble around the room until you starve.")

    start()

    你应该看到的结果

    你可以看到,我拿到太多金子了:

    $ python ex35.py
    You are in a dark room.
    There is a door to your right and left.
    Which one do you take?
    > left
    There is a bear here.
    The bear has a bunch of honey.
    The fat bear is in front of another door.
    How are you going to move the bear?
    > taunt bear
    The bear has moved from the door. You can go through it now.
    > open door
    This room is full of gold.  How much do you take?
    > asf
    Man, learn to type a number. Good job!
    $
    

    加分习题

  • 把这个游戏的地图画出来,把自己的路线也画出来。
  • 改正你所有的错误,包括拼写错误。
  • 为你不懂的函数写注解。记得文档注解该怎么写吗?
  • 为游戏添加更多元素。通过怎样的方式可以简化并且扩展游戏的功能呢?
  • 这个 gold_room 游戏使用了奇怪的方式让你键入一个数字。这种方式会导致什么样的 bug? 你可以用比检查 0、1 更好的方式判断输入是否是数字吗?int() 这个函数可以给你一些头绪。
  • Project Versions

    Table Of Contents

    • 习题 35: 分支和函数
      • 你应该看到的结果
      • 加分习题

    Previous topic

    习题 34: 访问列表的元素

    Next topic

    习题 36: 设计和调试

    This Page

    • Show Source

    Quick search

    Enter search terms or a module, class or function name.