• 笨办法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函数暂时搁置,稍候补全

  • 相关阅读:
    SQLite剖析之功能特性
    SQLite剖析之内核研究
    SQLite剖析之体系结构
    SQLite安装、编译与应用
    实验四 数据库查询--2
    Linux监控一之Nagios的安装与配置
    keepalived原理(主从配置+haproxy)及配置文件详解
    负载均衡之Haproxy配置详解(及httpd配置)
    使用HeartBeat实现高可用HA的配置过程详解
    在Linux安装配置Tomcat 并部署web应用 ( 三种方式 )
  • 原文地址:https://www.cnblogs.com/p36606jp/p/15113355.html
Copyright © 2020-2023  润新知