連續兩天想說要幫自己的「花痴」程式加上一些變數,但是都沒有成功執行,今天想說先放棄,直接往後面讀 Python-100-Days 第五天的內容,沒想到下一個章節有一個項目很吸引我,也讓我恍然大悟,它在第五天的題目,其中一題是「Craps賭博遊戲」。
我真的腦袋像被敲了一下一樣,對吼,我前幾天一直開玩笑說是詐賭,但是根本沒有把它當成是賭博遊戲,但是,仔細一想,這個遊戲方式的內部核心就是賭博啊。
於是,我開始爬文研究賭博遊戲的程式寫法,然後發現,這和前幾天單純擲骰子的寫法差很多。
無條件擲骰子的遊戲,比較像是機率遊戲,隨便中哪一顆都沒有關係,因此可以用「while循環」執行動作。
擲到特定的骰子出現特定文字,這個乍看之下以為只是玩骰子的遊戲而已,但因為加入了特定的條件,所以不在是單純的分支結構,每一個分支都要加上許多條件。有點像小樹,開枝散葉的概念,當想要執行的指令越多,分支就越多越緊密。
於是,我參考了網路上的賭博遊戲程式碼,寫出了下面這個程式。
rom random import randint
class Status:
WON = 6
CONTINUE = 1
def initialRoll(firstPoint):
return Status.WON if firstPoint in [6] else \
(Status.LOST if firstPoint in [1, 2, 3, 4, 5] else Status.CONTINUE)
def reRoll(firstPoint, point):
return Status.WON if firstPoint == point else \
(Status.LOST if 1 == point else Status.CONTINUE)
def dice():
return randint(1, 6)
firstPoint = dice()
print("玩家點數:[%d]" % firstPoint)
status = initialRoll(firstPoint)
while status == Status.CONTINUE:
point = dice()
print("玩家點數:%d" % point)
status = reRoll(firstPoint, point)
print("這肯定是命中註定誒!!!" if status == Status.WON else "再丟一次骰子,老天會指引你的)光芒")
然後,又到了截稿時間。
這次連梗圖都來不及放,時間真的不夠用啊 QQ
同樣的,再給我一小時)跪
就在我發完文以後,我就立刻回頭檢查我的程式碼,我發現一件重要的事情,在上方的程式碼中,我並沒有定義骰子點數1~6所需要執行的動作。
於是,我把昨天的程式碼,貼到
class Status:
WON = 6
CONTINUE = 1
上方程式碼之後,變成
from random import randint
class Status:
WON = 6
CONTINUE = 1
if face==1:
result='唱歌'
elif face==2:
result = '蘿蔔蹲'
elif face==3:
result='青蛙跳'
elif face==4:
result='喝苦茶'
elif face==5:
result='仰臥起坐'
else:
result='當我藍/鋁朋友'
def initialRoll(firstPoint):
return Status.WON if firstPoint in [6] else \
(Status.LOST if firstPoint in [1, 2, 3, 4, 5] else Status.CONTINUE)
def reRoll(firstPoint, point):
return Status.WON if firstPoint == point else \
(Status.LOST if 1 == point else Status.CONTINUE)
def dice():
return randint(1, 6)
firstPoint = dice()
print("玩家點數:[%d]" % firstPoint)
status = initialRoll(firstPoint)
while status == Status.CONTINUE:
point = dice()
print("玩家點數:%d" % point)
status = reRoll(firstPoint, point)
print("這肯定是命中註定誒!!!" if status == Status.WON else "再丟一次骰子,老天會指引你的)光芒")
但是,我執行程式碼的時候出現 NameError,我仔細看過以後發現,我沒有幫「face」下定義,因此我又在
class Status:
WON = 6
CONTINUE = 1
後面加上face=randint(1,6)
變成了下方修改完成的版本
from random import randint
class Status:
WON = 6
CONTINUE = 1
face=randint(1,6)
if face==1:
result='唱歌'
elif face==2:
result = '蘿蔔蹲'
elif face==3:
result='青蛙跳'
elif face==4:
result='喝苦茶'
elif face==5:
result='仰臥起坐'
else:
result='當我藍/鋁朋友'
def initialRoll(firstPoint):
return Status.WON if firstPoint in [6] else \
(Status.LOST if firstPoint in [1, 2, 3, 4, 5] else Status.CONTINUE)
def reRoll(firstPoint, point):
return Status.WON if firstPoint == point else \
(Status.LOST if 1 == point else Status.CONTINUE)
def dice():
return randint(1, 6)
firstPoint = dice()
print("玩家點數:[%d]" % firstPoint)
status = initialRoll(firstPoint)
while status == Status.CONTINUE:
point = dice()
print("玩家點數:%d" % point)
status = reRoll(firstPoint, point)
print("這肯定是命中註定誒!!!" if status == Status.WON else "再丟一次骰子,老天會指引你的)光芒")
我丟個骰子先!!!
搭拉!!!!!
這個真的是繼上次聽到天堂的聲音之後最開心的一件事了!!!
就像急救已久的寶寶,突然給你恢復心跳一樣。
但是,事情也絕對不是我們這種菜逼八想得那麼簡單。
因為想要骰到其他點數的時候能夠出現「再丟一次骰子,老天會指引你的)光芒」這一串文字,所以我重新丟骰子。
結果出現下圖的 AttributeError(屬性錯誤),也就是缺少某一種屬性,或是類函式的構造出現了問題。
這個錯誤除了點數6以外,也在其他的點數都出現,真的很令人不悅啊。
很好,我明天再繼續戰。
今天不支了,剛剛改稿改到睡著,還以為電腦當機了,被自己嚇醒。
[同場加映]
昨天本來要放的,結果忘記放)掩面
我這兩天大腦運作方式真的就是這張圖的完美詮釋。
大腦光速運轉中)笑哭
好了,今晚總算有個還算圓滿的結局。
開心收工。
不要太認真學 Python! - Day 8
https://ithelp.ithome.com.tw/articles/10214459