零基礎入門學習python_004筆記及作業_猜數字小遊戲V2.1

==============================以下為程式碼==============================

#猜數字遊戲2.0版。新版功能說明:
#答案隨機產生
#新增提示猜數過大或過小的功能
#猜到對為止


#導入random模組
#變數宣告secret = 1到10中間的隨機數字
import random
secret = random.randint(1,10)
#螢幕顯示Elliot Production
print("----------Elliot Production----------")
#變數宣告temp = 玩家輸入的數字。輸入前螢幕提示guess the number from 1 to 10
temp = input("guess the number from 1 to 10: ")
#變數宣告guess = 以數字形式顯示玩家所輸入的變數「temp」
guess = int(temp)
#使用while循環下面縮排的程式碼:當guess不等於secret的時候,執行下列動作
#變數宣告temp = 玩家輸入的數字。輸入前螢幕提示So sorry, you're wrong! Please guess again
#變數宣告guess = 以數字形式顯示玩家所輸入的temp
#當guess等於secret的時候,螢幕顯示文字
while guess != secret:
    temp = input("So sorry, you're wrong! Please guess again: ")
    guess = int(temp)
    if guess == secret:
        print("Wonderful")
        print("But still no reward")
#當guess不等於secret的時候
    else:
#若guess大於secret,螢幕顯示文字
        if guess > secret:
            print('Hey, too BIG')
#若guess不大於secret的時候,螢幕顯示文字
        else:
            print('Hey, too small')
#螢幕顯示文字
print("Game Over")

======================================================================

第四課的時候提出三項修正猜數字小遊戲的要求:
1. 猜錯時程序應給予過大或過小的提示
2. 提供三次猜測機會
3. 謎底應為隨機

課堂中小甲魚幫我們解決了第一項跟第三項要求,
就是上述的程式碼。
而作業就是提出第二項要求的解答。

解答概念:
宣告變數count = 3,每猜測一次數字後count -1,
當count = 0時遊戲結束。
小甲魚給予的提示是:使用Boolean值,
也就是用「and」、「or」的判斷式來達成程式邏輯。

============================第一次解答程式碼============================

count = 3
while guess != secret or count == 0:
    temp = input("So sorry, you're wrong! Please guess again: ")
    guess = int(temp)
    count = count -1
    if count == 0:
        print('so sad')
    if guess == secret:
        print("Wonderful")
        print("But still no reward")
    else:
        if guess > secret:
            print('Hey, too BIG')
        else:
            print('Hey, too small')

======================================================================

結果很慘。
用這種寫法,那中斷迴圈的條件只能是:
1. guess等於secret,所以判斷式「guess != secret」此時為「False」;
2. count不等於0,所以判斷式「count == 0」此時為「False」。
False or False = False,才能中斷迴圈。

所以會產生幾種結果:
1. 假設第一次就猜對:
guess等於secret,所以判斷式「guess != secret」此時為「False」;
count不等於0,所以判斷式「count == 0」此時為「False」。
False or False = False,
此時可以正常結束程式。
2. 假設第三次還猜錯:
guess不等於secret,所以判斷式「guess != secret」此時為「True」;
count等於0,所以判斷式「count == 0」此時為「True」。
True or True = True,
迴圈條件成立,迴圈繼續,產生bug。
3. 假設第三次剛好猜對:
guess等於secret,所以判斷式「guess != secret」此時為「False」;
count等於0,所以判斷式「count == 0」此時為「True」。
False or True = True
迴圈條件成立,迴圈繼續,產生bug。
4. 超過三次(假設第四次)才猜對:
guess等於secret,所以判斷式「guess != secret」此時為「False」;
count不等於0(此時該是-1),所以判斷式「count == 0」此時為「False」。
False or False = False,
此時可以正常結束程式。

因為邏輯不清楚,所以在迴圈這裡debug了很久。

============================第二次解答程式碼============================

while guess != secret and count == 0:
省版面,下略...

======================================================================

寫成這樣的話,
結束迴圈的條件是:
1. guess等於secret,所以判斷式「guess != secret」此時為「False」;
2. count不等於0,所以判斷式「count == 0」此時為「False」。
True and True = True,但是只要兩邊有其一是False則為False,
所以只要條件兩者達成其一即可。

當猜錯謎底時:
guess不等於secret,所以判斷式「guess != secret」此時為「True」;
count不等於0,所以判斷式「count == 0」此時為「False」。
True and False = False,
所以while迴圈會中斷。
debug失敗。

============================第三次解答程式碼============================

while guess != secret or count != 0:
省版面,下略...

======================================================================

改成這樣呢?
結束迴圈的條件是:
1. guess等於secret,所以判斷式「guess != secret」此時為「False」;
2. count等於0,所以判斷式「count != 0」此時為「False」。
False or False = False,才能中斷迴圈。

所以會產生幾種結果:
1. 假設第一次就猜對:
guess等於secret,所以判斷式「guess != secret」此時為「False」;
count不等於0,所以判斷式「count == 0」此時為「True」。
False or True = True,
迴圈條件成立,迴圈繼續,產生bug。
2. 假設第三次還猜錯:
guess不等於secret,所以判斷式「guess != secret」此時為「True」;
count等於0,所以判斷式「count != 0」此時為「False」。
True or False = True,
迴圈條件成立,迴圈繼續,產生bug。
3. 假設第三次剛好猜對:
guess等於secret,所以判斷式「guess != secret」此時為「False」;
count等於0,所以判斷式「count != 0」此時為「False」。
False or False = False
此時才能結束程式。
4. 超過三次(假設第四次)才猜對:
guess等於secret,所以判斷式「guess != secret」此時為「False」;
count不等於0(此時該是-1),所以判斷式「count != 0」此時為「True」。
False or True = True,
迴圈條件成立,迴圈繼續,產生bug。

============================最終解答程式碼============================

while guess != secret and count != 0:
省版面,下略...

======================================================================

此時結束迴圈的條件是:
1. guess等於secret,所以判斷式「guess != secret」此時為「False」;
2. count等於0,所以判斷式「count != 0」此時為「False」。
True and True = True,才能執行迴圈,

所以會產生幾種結果:
1. 假設三次以內猜對:
guess等於secret,所以判斷式「guess != secret」此時為「False」;
count不等於0,所以判斷式「count == 0」此時為「True」。
False and True = False,
迴圈中止,程式正常結束。
2. 假設第三次還猜錯:
guess不等於secret,所以判斷式「guess != secret」此時為「True」;
count等於0,所以判斷式「count != 0」此時為「False」。
True and False = False,
迴圈中止,程式正常結束。


邏輯釐清花了我好久的時間去思考,
好累....~"~

留言

這個網誌中的熱門文章

簡易版複利計算機

零基礎入門學習python_003筆記及作業_字串與轉譯

哈佛大學計算機通識課程:CS50