Ex35 Branches and Functions

条件语句与函数综合应用

在 Ex35 当中,通过设计一个文本交互游戏,来联系条件语句和函数。这段代码较长,设计多个函数。代码里需要注意的设计,我写在注释里面。

示例代码

Ex35 示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
from sys import exit
### *gold_room()* 函数,要把获取的字符串,转换成数字,根据数字,然后输出不同结果
def gold_room():
    print "This room is full of gold.  How much do you take?"

    choice = raw_input("> ")
    # 如果输入2,或其他非0非1数字,程序会执行 dead("Man, learn to type a number.")
    # 需要引入新的方法,来判断输入的字符串是否为纯数字
    # Python 的内建功能,提供了一个方法: isdigit()
    if "0" in choice or "1" in choice:  
        how_much = int(choice)
    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_move 有什么用处,为什么要设定成“False”
    bear_moved = False 

    while True:
        choice = raw_input("> ")

        if choice == "take honey":
            dead("The bear looks at you then slaps your face off.")
        elif choice == "taunt bear" and not bear_moved:
            print "The bear has moved from the door. You can go through it now."
            ## 又见 bear_move            
            bear_moved = True
        elif choice == "taunt bear" and bear_moved:
            dead("The bear gets pissed off and chews your leg off.")
        elif choice == "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?"

    choice = raw_input("> ")

    if "flee" in choice:
        start()
    elif "head" in choice:
        dead("Well that was tasty!")
    else:
        cthulhu_room()

# 想想“DRY”原则,设置 dead() 函数的必要性
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?"

    choice = raw_input("> ")

    if choice == "left":
        bear_room()
    elif choice == "right":
        cthulhu_room()
    else:
        dead("You stumble around the room until you starve.")
start()

我把 isdigit() 用到了源程序里,程序结果截图:

小结

  1. 什么时候,需要把一些动作封装为函数: “DRY”原则;
  2. 使用 isdigit() 判断输入字符串是否为纯数字;
  3. 回顾函数知识,函数的参数也可以是空。
Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计