笨办法42物以类聚(补充40)

stuff = ['Test', 'This', 'Out']
print(' '.join(stuff))

输出结果:

D:PythonPython36python.exe E:/pytest/ex42.py
Test This Out

Process finished with exit code 0

其实这里已经使用了class。

stuff 这个变量其实是一个 list class(列表类)。

'.join(stuff) 里调用函数 join 的字符串 '也是一个 class ,是一个 string class (字符串类)。 

join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

class TheThing(object):
    def __init__(self):
        self.number = 0
    def some_function(self):
        print("I got called.")
    def add_me_up(self, more):
        self.number += more
        return self.number


a = TheThing()
b = TheThing()

a.some_function()
b.some_function()

print(a.add_me_up(20))
print(a.add_me_up(20))
print(b.add_me_up(30))
print(b.add_me_up(30))

print(a.number)
print(b.number)


class TheMultiplier(object):
    def __init__(self, base):
        self.base = base
    def do_it(self, m):
        return m * self.base

x = TheMultiplier(a.number)
print(x.do_it(b.number))

参数里的 self 是 Python 创建的额外的一个参数,有了它你才能实现 a.some_function() 这种用法,这时它就会将其翻译成 some_function(a) 执行下去。

为什么用 self 呢?因为函数并不知道这个“实例”是来自叫 TheThing 或者别的名字的 class。所以只要使用一个通用的名字 self 。这样你写出来的函数就会在任何情况下都能正常工作。

其实可以使用 self 以外的别的字眼,不过如果你这样做的话,你就会成为所有Python 程序员的众之矢的,所以还是随大流的好。

接下来, __init__ 函数是为 Python class 设置内部变量的方式。可以使用 . 将它们设置到 self 上面。另外使用了 add_me_up() 为 self.number 加值。之后我们使用这种方法为数字加值,然后打印出来。

接着创建了另一个叫 TheMutiplier 的 class,它的功能是做乘法。这样的 class 其实是非常没必要的,不过它展示了如何将变量和状态从一个 class 传递到另一个 class。

这里使用了 TheMultiplier.__init__ 来从 a.number 来获取基本数值,将 b.number 传递到 TheMultiplier.do_it 以供调用。

以下为运行结果:

D:PythonPython36python.exe E:/pytest/ex42.py
I got called.
I got called.
20
40
30
60
40
60
2400

Process finished with exit code 0

用类class重写哥顿星人

# coding=utf-8
from sys import exit
from random import randint


class Game(object):
    def __init__(self, start):
        self.quips = [
            "你死了。"                          # 字典quips
            "你在这有点糟糕",
            "干得漂亮,你死了,愚蠢的人类",
            "失败者",
            "我有只小狗很擅长这个"
        ]
        self.start = start

    def play(self):
        next = self.start
        while True:
            print("
-----------")
            room = getattr(self, next)
            next = room()

    def death(self):
        print(self.quips[randint(0, len(self.quips)-1)])
        exit(1)

    def central_corridor(self):
        print("来自Percal25号行星的哥顿人入侵并破坏了你的飞船")
        print("你的全体船员已经阵亡,你是最后的幸存者")
        print("任务是从武器库中拿到中子自毁炸弹")
        print("把它放在舰桥上,在你进入一个。。后炸毁飞船")
        print("逃生仓")
        print("
")
        print("你正奔跑在中央走廊到武器库的路上")
        print("这时一个哥顿人跳出来,红皮肤,黑牙齿,邪恶的服装")
        print("怨恨充斥着他的身体,他正在挡在武器库的门外,好像正准备扔出炸弹炸死你")

        action = input("1>")
        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(self):
        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(self):
        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(self):
        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)

a_game = Game("escape_pod")
a_game.play()

getattr函数暂时搁置,稍候补全

原文地址:https://www.cnblogs.com/p36606jp/p/15113355.html