zoukankan      html  css  js  c++  java
  • 笨办法41来自 Percal 25 号行星的哥顿人-randint-exit(0)

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

    一个函数也可以作为一个变量,``def find_city`` 比如这一句创建了一个你可以在任何地方都能使用的变量。在这段代码里,首先把函数 find_city 放到叫做 cities 的字典中,并将其标记为 '_find'。 

    这和上一课将州和市关联起来的代码做的事情一样,只不过我们在这里放了一个函数的名称。

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

    1. Python 看到 city_found = 于是知道了需要创建一个变量。

    2. 然后它读到 cities ,然后知道了它是一个字典

    3. 然后看到了 ['_find'] ,于是 Python 就从索引找到了字典 cities 中对应的位置,并且获取了该位置的内容。

    4. ['_find'] 这个位置的内容是我们的函数 find_city ,所以 Python 就知道了这里表示一个函数,于是当它碰到 ( 就开始了函数调用。

    5. cities, state 这两个参数将被传递到函数 find_city 中,然后这个函数就被运行了。

    6. find_city 接着从 cities 中寻找 states ,并且返回它找到的内容,如果什么都没找到,就返回一个信息说它什么都没找到。

    7. Python find_city 接受返回的信息,最后将该信息赋值给一开始的 city_found 这个变量。

    如果倒着阅读,代码可能会变得更容易理解。让我们来试一下,一样是那行:

    1. state 和 city 是...

    2. 作为参数传递给...

    3. 一个函数,位置在...

    4. '_find' 然后寻找,目的地为...

    5. cities 这个位置...

    6. 最后赋值给 city_found.

    还有一种方法读它,这回是“由里向外”。

    1. 找到表达式的中心位置,此次为 ['_find'].

    2. 逆时针追溯,首先看到的是一个叫 cities 的字典,这样就知道了 cities 中的 _find 元素。

    3. 上一步得到一个函数。继续逆时针寻找,看到的是参数。

    4. 参数传递给函数后,函数会返回一个值。然后再逆时针寻找。

    5. 最后,我们到了 city_found = 的赋值位置,并且得到了最终结果。


    已翻译代码:

    # coding:utf-8
    from sys import exit
    from random import randint
    
    
    def death():
        quips = ["你死了。"                          # 字典quips
                 "你在这有点糟糕",
                 "干得漂亮,你死了,愚蠢的人类",
                 "失败者",
                 "我有只小狗很擅长这个"]
        print(quips[randint(0, len(quips)-1)])      # randint随机生成数,打印出随机一个value
        exit(1)                                     # 表示发生了错误退出,exit(0)正常退出
    
    
    def central_corridor():
        print("来自Percal25号行星的哥顿人入侵并破坏了你的飞船")
        print("你的全体船员已经阵亡,你是最后的幸存者")
        print("任务是从武器库中拿到中子自毁炸弹")
        print("把它放在舰桥上,在你进入一个。。后炸毁飞船")
        print("逃生仓")
        print("
    ")
        print("你正奔跑在中央走廊到武器库的路上")
        print("这时一个哥顿人跳出来,红皮肤,黑牙齿,邪恶的服装")
        print("怨恨充斥着他的身体,他正在挡在武器库的门外,好像正准备扔出炸弹炸死你")
        action = input("> ")
        while True:
            if action == "shoot!":
                print("快速拔出你的枪并朝哥顿人开火")
                print("他灵活的移动让你失去了目标,你的激光枪击中了他的服装,这")
                print("让他整个燃烧起来")
                print("这让他非常愤怒,不停的揍你的脸,直到")
                print("你死了,然后他吃了你")
                return "death"
            elif action == "dodge!":
                print("像一个世界级拳击手,你躲闪")
                print("哥顿人的枪射穿了你的头,然后把你吃了")
                return "death"
            elif action == "tell a joke":
                print("哥顿人喜欢听笑话")
                print("你给他讲了个非常搞笑的笑话,趁他不注意,你爆了他的头")
                print("穿过了武器库的门")
                return "laser_weapon_armory"
            else:
                print("别想了")
                return 'central_corridor'
    
    
    def laser_weapon_armory():
        print("你打了个洞进入武器库")
        print("这里死静死静的,好像埋伏着好多哥顿人")
        print("你发现了中子炸弹,但是它被密码锁锁着")
        print("你需要代码才能打开")
        print("如果输错10次,密码锁将永远锁着")
        print("提示:代码是3个数字")
        code = "%d%d%d" % (randint(1, 9), randint(1, 9), randint(1, 9))     # 随机生成一个三位数
        print(code)         # 打印随机到的数字
        guess = input("[keypad]> ")
        guesses = 0                                 # 给guesses猜测次数赋初始值0
        while guess != code and guesses < 10:       # 猜错时再次执行,直到guesses值等于10,进入else分支
            print("BZZZZEDDD!")
            guesses += 1                            # 猜错一次,guesses自增1
            guess = input("[keypad]> ")
        if guess == code:
            print("锁打开了,飘荡出白色的气体")
            print("你带着中子弹跑得越来越快")
            print("你必须把中子弹放在舰桥正确的位置")
            return "the_bridge"
        else:
            print("你最后一次听到了滴滴声")
            print("锁永久锁定了")
            print("你决定静静的坐着,最终哥顿人炸掉了飞船,你挂了")
            return "death"
    
    
    def the_bridge():
        print("你带着中子弹突然出现在舰桥")
        print("惊动了5个哥顿人")
        print("他们正试图控制飞船,他们每个人都穿着一套丑陋的服装")
        print("他们还没有拿出武器,因为他们看到你手上正拿着一个已经启动的炸弹,他们不想看着它爆炸")
        action = input("> ")
        if action == "throw the bomb":
            print("恐慌中,你把炸弹扔向了哥顿人")
            print("这时一个哥顿人从背后把你射杀,你倒地的时候看见一个哥顿人正在解除炸弹")
            return "death"
        elif action == "slowly place the bomb":
            print("你指着手中的炸弹,哥顿人被吓到了,他们举起手开始惊慌,")
            print("你慢慢地移动到门口,小心的把炸弹放到地上")
            print("你把门锁住,哥顿人出不来。炸弹放置好了,你跑向逃生仓")
            return "escape_pod"
        else:
            print("DOES NOT COMPUTE")
            return "the_bridge"
    
    
    def escape_pod():
        print("你冲向逃生仓,争取整个船爆炸前,")
        print("似乎船上没有其他哥顿人,你一路很顺利")
        print("你来到逃生仓,这里有5个仓位,你要选择一个")
        print("你选择哪一个?")
        good_pod = randint(1, 5)
        print(good_pod)                 # 打印门号
        guess = input("[pod #]> ")
        if int(guess) != good_pod:
            print("你跳进 %s 号逃生仓,按下了弹出按钮" % guess)
            print("逃生仓发生了爆炸")
            print("你挂了")
            return "death"
        else:
            print("你跳进 %s 号逃生仓,按下了弹出按钮" % guess)
            print("你赢了")
            exit(0)
    
    
    ROOMS = {
        'death': death,
        'central_corridor': central_corridor,
        'laser_weapon_armory': laser_weapon_armory,
        'the_bridge': the_bridge,
        'escape_pod': escape_pod
    }
    
    
    def runner(map, start):         # central_corridor赋值给start
        next = start                # next是字符串变量# central_corridor赋值给next
        while True:
            room = map[next]        # room是函数
            print("
    -----------")
            next = room()           # 根据room函数的返回结果对next赋值
    
    
    runner(ROOMS, 'central_corridor')   # 字典ROOMS、key传递给函数runner
  • 相关阅读:
    Linux Cannot allocate memory问题
    Linux后台运行Jar方法
    盒模型:外边距叠加和外边距为负值
    HTML如何创建二级目录
    css3实现立方体,并且自转效果
    前台技术--页面跳转的几种用法
    JS实现网站内容的禁止复制和粘贴、另存为
    网络爬虫大白话解析
    HTML5 canvas绘制arcTo、translate和rotate的画法探索
    HTML5实战与剖析之原生拖拽(一拖拽历史概述)
  • 原文地址:https://www.cnblogs.com/p36606jp/p/15113354.html
Copyright © 2011-2022 走看看