《笨辦法學 python3》系列練習計劃——35.分支和函式
阿新 • • 發佈:2019-02-07
題目
我們已經學會了 if
語句、函式還有列表。現在我們需要搞清楚本題程式碼實現的是什麼功能。
加分練習
- 把這個遊戲的地圖畫出來,把自己的路線也畫出來。
- 改正你所有的錯誤,包括拼寫錯誤。
- 為不懂的地方寫註解。
- 為遊戲新增更多元素。通過怎樣得方式可以簡化並且擴充套件遊戲的功能呢?
- 這個
gold_room
遊戲使用了奇怪的方式讓你鍵入一個數字。這種方式會導致什麼樣的 bug ?你可以用比檢查 0、1 更好的方式判斷輸入是否是數字嗎?int()
這個函式可以給你一些頭緒。
我的答案
35.0 基礎練習 + 35.2除錯 + 35.3 註解
# sys.exit 用於結束程式
from sys import exit
# 進入黃金房間後的邏輯
def gold_room():
print("This room is full of gold. How much do you take?")
# 如果輸入不包含 0 或 1 則死
next = input("> ")
if "0" in next or "1" in next:
how_much = int(next)
else:
dead("Man, learn to type a number.")
# 如果輸入的數字大於等於 50 則死
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 hear.")
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 = False
# 如果熊離開後直接開門就用不到 while 迴圈了.
while 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 = True
elif 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 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_roome()
else:
dead("You stumble around the room until you starve.")
# 開始遊戲
start()
目測這款遊戲想打通關可不容易,讓我們來些攻略吧
35.1 遊戲地圖(攻略)
我發現自己似乎不太擅長畫流程圖啊
35.4 新增元素
比較方便的方法還是想辦法寫函式吧,不過因為文字量比大所以感覺仍然不是很方便。
35.5 gold_room 的 bug
可以直接改這樣
next = input("> ")
how_much = int(next)
不過如果 next 不是數字文字的話就會出錯,不知道在當前知識進度下有沒有其他好辦法。