笨方法学Python 习题 35: 分支和函数

来源:互联网 发布:戎美女装淘宝店 编辑:程序博客网 时间:2024/05/17 06:39
#!usr/bin/python# -*-coding:utf-8-*-from sys import exitdef gold_room():print("This room is full of gold.  How much do you take?")next = input("> ")if "0" in next or "1" in next:how_much = int(next)else:dead("Man, learn to type a number.")if how_much < 50:print("Nice, you're not greedy, you win!")exit(0)else:dead("You greedy bastard!")def bear_room():print ("There is a bear here.")print ("The bear has a bunch of honey.")print ("The fat bear is in front of another door.")print ("How are you going to move the bear?")bear_moved = Falsewhile True:next = input("> ")if next == "take honey":dead("The bear looks at you then slaps your face off.")elif next == "taunt bear" and not bear_moved:print("The bear has moved from the door. You can go through it now.")bear_moved = Trueelif next == "taunt bear" and bear_moved:dead("The bear gets pissed off and chews your leg off.")elif next == "open door" and bear_moved:gold_room()else:print("I got no idea what that means.")def cthulhu_room():print ("Here you see the great evil Cthulhu.")print ("He, it, whatever stares at you and you go insane.")print ("Do you flee for your life or eat your head?")next = input("> ")if "flee" in next:start()elif "head" in next:dead("Well that was tasty!")else:cthulhu_room()def dead(why):print(why,"Good job")exit(0)def start():print ("You are in a dark room.")print ("There is a door to your right and left.")print ("Which one do you take?")next = input("> ")if next == "left":bear_room()elif next == "right":cthulhu_room()else:dead("You stumble around the room until you starve.")start()

运行结果如下:

You are in a dark room.There is a door to your right and left.Which one do you take?> leftThere is a bear here.The bear has a bunch of honey.The fat bear is in front of another door.How are you going to move the bear?> taunt bearThe bear has moved from the door. You can go through it now.> open doorThis room is full of gold.  How much do you take?> asfMan, learn to type a number. Good job!

加分习题

把这个游戏的地图画出来,把自己的路线也画出来。


改正你所有的错误,包括拼写错误。

为你不懂的函数写注解。记得文档注解该怎么写吗?

为游戏添加更多元素。通过怎样的方式可以简化并且扩展游戏的功能呢?

这个 gold_room 游戏使用了奇怪的方式让你键入一个数字。这种方式会导致什么样的 bug? 你可以用比检查 0、1 更好的方式判断输入是否是数字吗?int() 这个函数可以给你一些头绪。

常见问题回答

救命啊!太难了我搞不懂!

当你搞不懂的时候,就在*每一行*代码的上方写下注解,向自己解释这一行的功能。在这个过程中如果有了新的理解,就随时修正自己前面的注解。注解完后,就画一个工作原理的示意图,或者写一段文字表述一下。这样你就能弄懂了。

为什么是 while True:?

这样可以创建一个无限循环。

exit(0) 有什么功能?

在很多类型的操作系统里,``exit(0)`` 可以中断某个程序,而其中的数字参数则用来表示程序是否是碰到错误而中断。 exit(1) 表示发生了错误,而 exit(0) 则表示程序是正常退出的。这和我们学的布尔逻辑 0==False 正好相反,不过你可以用不一样的数字表示不同的错误结果。比如你可以用 exit(100) 来表示另一种和 exit(2)` 或 exit(1) 不同的错误。

为什么 raw_input() 有时写成 raw_input('> ')?

raw_input 的参数是一个会被打印出来的字符串,这个字符串一般用来提示用户输入。