iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
1
自我挑戰組

不要太認真學 Python! 之 我又重新報名了系列 第 6

不要太認真學 Python! - Day 9

  • 分享至 

  • xImage
  •  

[前情提要]

連續兩天想說要幫自己的「花痴」程式加上一些變數,但是都沒有成功執行,今天想說先放棄,直接往後面讀 Python-100-Days 第五天的內容,沒想到下一個章節有一個項目很吸引我,也讓我恍然大悟,它在第五天的題目,其中一題是「Craps賭博遊戲」。

我真的腦袋像被敲了一下一樣,對吼,我前幾天一直開玩笑說是詐賭,但是根本沒有把它當成是賭博遊戲,但是,仔細一想,這個遊戲方式的內部核心就是賭博啊。

https://ithelp.ithome.com.tw/upload/images/20190911/20120423NUC6LXPxTS.jpg


於是,我開始爬文研究賭博遊戲的程式寫法,然後發現,這和前幾天單純擲骰子的寫法差很多。

無條件擲骰子遊戲 VS. 擲到特定的骰子出現特定文字

  1. 無條件擲骰子的遊戲,比較像是機率遊戲,隨便中哪一顆都沒有關係,因此可以用「while循環」執行動作。

  2. 擲到特定的骰子出現特定文字,這個乍看之下以為只是玩骰子的遊戲而已,但因為加入了特定的條件,所以不在是單純的分支結構,每一個分支都要加上許多條件。有點像小樹,開枝散葉的概念,當想要執行的指令越多,分支就越多越緊密。

於是,我參考了網路上的賭博遊戲程式碼,寫出了下面這個程式。

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

同樣的,再給我一小時)跪

https://ithelp.ithome.com.tw/upload/images/20190910/20120423ovMINeIDkK.png
https://ithelp.ithome.com.tw/upload/images/20190910/20120423szuppWgnAl.jpg


就在我發完文以後,我就立刻回頭檢查我的程式碼,我發現一件重要的事情,在上方的程式碼中,我並沒有定義骰子點數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 "再丟一次骰子,老天會指引你的)光芒")

我丟個骰子先!!!
搭拉!!!!!

https://ithelp.ithome.com.tw/upload/images/20190911/20120423Y9t03sPgMp.png

這個真的是繼上次聽到天堂的聲音之後最開心的一件事了!!!

就像急救已久的寶寶,突然給你恢復心跳一樣。

https://ithelp.ithome.com.tw/upload/images/20190911/20120423LTlP09oo0l.jpg

但是,事情也絕對不是我們這種菜逼八想得那麼簡單。

https://ithelp.ithome.com.tw/upload/images/20190911/20120423RDi3Jm82Rv.jpg

因為想要骰到其他點數的時候能夠出現「再丟一次骰子,老天會指引你的)光芒」這一串文字,所以我重新丟骰子。

結果出現下圖的 AttributeError(屬性錯誤),也就是缺少某一種屬性,或是類函式的構造出現了問題。

這個錯誤除了點數6以外,也在其他的點數都出現,真的很令人不悅啊。

https://ithelp.ithome.com.tw/upload/images/20190911/20120423RGlNam6waS.png

很好,我明天再繼續戰。
今天不支了,剛剛改稿改到睡著,還以為電腦當機了,被自己嚇醒。

https://ithelp.ithome.com.tw/upload/images/20190911/20120423KRGUaXdy4Q.png

[同場加映]
昨天本來要放的,結果忘記放)掩面

我這兩天大腦運作方式真的就是這張圖的完美詮釋。

大腦光速運轉中)笑哭

https://ithelp.ithome.com.tw/upload/images/20190911/20120423Xu45Colmv3.jpg

好了,今晚總算有個還算圓滿的結局。

開心收工。


不要太認真學 Python! - Day 8
https://ithelp.ithome.com.tw/articles/10214459


上一篇
不要太認真學 Python! - Day 8
下一篇
不要太認真學 Python! - Day 10
系列文
不要太認真學 Python! 之 我又重新報名了31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言