zoukankan      html  css  js  c++  java
  • 笨办法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函数暂时搁置,稍候补全

  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/p36606jp/p/15113355.html
Copyright © 2011-2022 走看看