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