《笨办法学Python》 第41课手记

《笨办法学Python》 第41课手记

本节课的代码有168行,但是冗长不代表困难,只是print里面的游戏说明内容太多,整体来说是很容易的,你要锻炼自己的耐心,把这168行代码完成得准确无误。

看了这段代码,我是没有任何要玩这个游戏的欲望。具体原因在本节课涉及的知识里。

原代码如下:

from sys import exit
from random import randint

def death():
    quips = ["Your died. You kinda suck at this.",
            "Nice job, you died ...jackass.",
            "Such a luser.",
            "I have a small puppy that's better at this"]
    print quips[randint(0, len(quips)-1)]
    exit(1)

def central_corridor():
    print "The Gothnons of Planet Percal #25 have invaded yourship and destroyed"
    print "Your entire crew. You are the last surviving menber and your last"
    print "mission is to get the neutron destruct bomb from the Weapons Armory,"
    print "Put it in the bridge, and blow the ship uo after getting into an "
    print "ecape pod."
    print "\n"
    print "Your are runing down the central corridor to the Weapons Armory when"
    print "a Gothon jumps out, red scaly skin, dark grimy teeth, and evil clown costume"
    print "flowing around his hate filled body. He's blocking the door to the"
    print "Armory and about to pull a weapon to blast you."

    action = raw_input("> ")

    if action == "Shoot!":

        print "Quick on the draw you yank out your blaster and fire it at the Gothon."
        print "His clown costume is flowing and moving around his body, which throws"
        print "off your aim. Your laser hits his costume but missed him entirely. This"
        print "completely ruins his brand new costume his mother bought him, which"
        print "makes him fly into an insane rage and blast you repeatedly in the face until"
        print "you are dead. Then he eats you."
        return 'death'

    elif action == "dodge!":
        print "Like a world class boxer you dodge, weave, slip and slide right"
        print "as the Gothon's blaster cranks a laser past your head."
        print "In the middle of your artful dodge your foot slips and you"
        print "bang your head on the metal wall and pass out."
        print "You wake up shortly after only to die as the Gothon stomps on"
        print "your head and eats you."
        return 'death'

    elif action == "tell ajoke":
        print "Lucky for you they made you learn Gothon insults in the academy."
        print "You tell the one Gothon joke you know:"
        print "Lbhe zbgure vf fb sng, jura fur fvgf nebhaq gurubhfr, fur fvgf nebhaq gur ubhfr."
        print "The Gothon stops, tries not to laugh, then busts out laughing and can't move."
        print "While he's laughing you run up and shoot him square in the head"
        print "putting him down, then jump through the Weapon Armory door."
        return 'laser_weapon_armory'

    else:
        print "DOES NOT COMPUTE!"
        return 'central_corridor'

def laser_weapon_armory():
    print "You do a dive roll into the Weapon Armory, crouch and scan the room"
    print "for more Gothon that might be hiding. It's dead quiet, too quiet."
    print "You stand up and run the far side of the room and find the"
    print "neutron bomb in its container. There's a keypad lock on the box"
    print "and you need the code to get the bomb out. If you get the code"
    print "wrong 10 times then the lock closes forever and you can't"
    print "get the bomb. The code is 3 digits."

    code = "%d%d%d" %(randint(1,9), randint(1,9),randint(1,9))

    guess = raw_input("[keypad]> ")
    guesses = 0

    while guess !=code and guesses < 10:
        print "BZZZZEDDD!"
        guesses += 1
        guess = raw_input("[keypad]> ")

    if guess == code:
        print "The container clicks open and the seal breaks, letting gas out."
        print "You grab the neutron bomb and run as fast as you can to the"
        print "bridge where you must place it in the right spot."
        return 'the_bridge'

    else:
        print "The lock buzzes one last time and then you hear a sickening"
        print "melting sound as the mechanism is fused together."
        print "You decide to sit there, and finally the Gothons blow up the"
        print "ship from their ship and you die."
        return 'death'

def the_bridge():
    print "You burst onto the Bridge with the neutron destruct bomb"
    print "under your arm and surprise 5 Gothons who are trying to"
    print "take control of the ship.  Each of them has an even uglier"
    print "clown costume than the last.  They haven't pulled their"
    print "weapons out yet, as they see the active bomb under your"
    print "arm and don't want to set it off."

    action = raw_input("> ")

    if action == "throw the bomb":
        print"In a panic you throw the bomb at the group of Gothons"
        print "and make a leap for the door.  Right as you drop it a"
        print "Gothon shoots you right in the back killing you."
        print "As you die you see another Gothon frantically try to disarm"
        print "the bomb. You die knowing they will probably blow up when"
        print "it goes off."
        return 'death'

    elif action == "slowly place the bomb":
        print "You point your blaster at the bomb under your arm"
        print "and the Gothons put their hands up and start to sweat."
        print "You inch backward to the door, open it, and then carefully"
        print "place the bomb on the floor, pointing your blaster at it."
        print "You then jump back through the door, punch the close button"
        print "and blast the lock so the Gothons can't get out."
        print "Now that the bomb is placed you run to the escape pod to"
        print "get off this tin can."
        return 'escape_pod'

    else:
        print "DOES NOT COMPUTE!"
        return "the_bridge"

def escape_pod():
    print "You rush through the ship desperately trying to make it to"
    print "the escape pod before the whole ship explodes.  It seems like"
    print "hardly any Gothons are on the ship, so your run is clear of"
    print "interference.  You get to the chamber with the escape pods, and"
    print "now need to pick one to take.  Some of them could be damaged"
    print "but you don't have time to look.  There's 5 pods, which one"
    print "do you take?"

    good_pod = randint(1,5)
    guess = raw_input("[pod #]> ")

    if int(guess) != good_pod:
        print "You jump into pod %s and hit the eject button." % guess
        print "The pod escapes out into the void of space, then"
        print "implodes as the hull ruptures, crushing your body"
        print "into jam jelly."
        return 'death'

    else:
        print "You jump into pod %s and hit the eject button." % guess
        print "The pod easily slides out into space heading to"
        print "the planet below.  As it flies to the planet, you look"
        print "back and see your ship implode then explode like a"
        print "bright star, taking out the Gothon ship at the same"
        print "time.  You won!"
        eixt(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):
    next = start

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

runner(ROOMS, 'central_corridor')

其中一种玩法结果如下:

本节课涉及的知识

①from sys import exit 从sys模组中引入exit即退出功能

Python退出程序的方式有两种:os._exit(), sys.exit()

1)os._exit() 直接退出 Python程序,其后的代码也不会继续执行。

2)sys.exit() 引发一个 SystemExit异常,若没有捕获这个异常,Python解释器会直接退出;捕获这个异常可以做一些额外的清理工作。0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获。 exit() 跟 C 语言等其他语言的 exit() 应该是一样的。

os._exit() 调用 C 语言的 _exit() 函数。

一般来说os._exit() 用于在线程中退出 sys.exit() 用于在主线程中退出。

②from random import randint 从random模组中引入randint即产生随机整型数

Python中的random模块用于生成随机数。下面介绍一下random模块中最常用的几个函数。

random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0

random.uniform random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机浮点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a < b, 则 b <= n <= a。

random.randint random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

printrandom.randint(20,10)#该语句是错误的。下限必须小于上限。

random.randrange random.randrange的函数原型为:random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。

random.choice random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章。下面是使用choice的一些例子:

random.shuffle  random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱。如:p=[“Python”,”is”,”powerful”,”simple”,”andsoon…”]

random.shuffle(p)
print p

random.sample random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。

如:list=[1,2,3,4,5,6,7,8,9,10] slice=random.sample(list,5)#从list中随机获取5个元素,作为一个片断返回到slice

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Redis源码学习系列

Redis源码学习之字典

在字典结构体中,包含了一组字典函数(dictType),通过封装的方法处理对应的操作,通常在字典初始化的时候对其进行配置。

40710
来自专栏Laoqi's Linux运维专列

python3–内置模块Ⅱ

51580
来自专栏xingoo, 一个梦想做发明家的程序员

圆排列问题-回溯法

问题描述:     给定n个大小不等的圆 c1 c2 c3 c4 要将n个圆排进一个矩形框中,且要求底边相切。找出有最小长度的圆排列。     例如:当n=3,...

28290
来自专栏生信宝典

来一份Python学习题

3*2**2的输出是多少?(1分) 8 % 4的输出是多少?(1分) 32 + '32'的输出是什么?(1分) 32 > '32'的输出是什么?(1分) 'Sh...

45450
来自专栏Golang语言社区

使用 Go 语言学会 Tensorflow

Tensorflow 并不是一个专门用于机器学习的库,相反的,它是一个通用的用于图计算的库。它的核心部分是用 C++ 实现的,同时还有其它语言的接口库。Go 语...

53120
来自专栏蓝天

sed 学习笔记(转)

声明:这些代码只是为了学习和理解sed命令而为之,并不代表问题的唯一解或最佳解,希望各位拍砖

9020
来自专栏人工智能头条

TensorFlow架构与设计:变量初始化

10740
来自专栏蓝天

snprintf和strncpy对比

有关snprintf返回值更多信息,请参考:http://bbs.hadoopor.com/thread-1185-1-1.html

13620
来自专栏mathor

LeetCode410. 分割数组的最大值

 这道题看着好像没什么思路,但其实可以利用二分法来做,二分法中的mid就是最终要返回的值,也就代表着子数组的和最小的值  我们首先还是设置左右区间,左区...

15930
来自专栏小樱的经验随笔

Codeforces Round #411 (Div. 2)(A,B,C,D 四水题)

A. Fake NP time limit per test:1 second memory limit per test:256 megabytes inpu...

32660

扫码关注云+社区

领取腾讯云代金券