[課程討論] Day 14 - Beginner - Higher Lower Game Project

Py基礎組,將於2021/5/9 PM 9:00,進行Day 14課程討論。
相關資訊,更新於此

  1. The flow chart of the project.
    Provided by @timaskwhy

  2. Project result.
    Provided by PBG.

Phase 1

1個讚

謝謝Laurence!

以下連結是這次我練習寫的code,試了幾次運作雖然貌似正常,不過遇到兩個問題:

  1. 因為function裡面有用到global scope的關係,似乎沒辦法把整個遊戲囊括進一個叫做game( )的function去跑,不知道這樣是不是不好
  2. 感覺還有其他重複的地方可以簡化為function,但目前想不到該怎麼解

不錯喔! 浮出水面呼吸了。XD
晚上,我們可以討論一下。

目前,看了老師的影片(還沒看完),發現了2個問題。

Q1:
選手A與B比較後,勝出者的問題,將被保留,當作下一次選手A的問題。

A1:
這個部份,做錯了,phase 1的做法,是每次都重新產生選手A與B的問題。
嘗試修正於phase 2。

Q2.
意外發現,game_data(索引位置39、40),follower_count的值是相同的。
因為,還沒看完影片,不確定這是不是老師特別安排的,或只是打錯字。

2021_0509 PM 04:27
看完影片後,老師沒有提到這件事。
因為,老師的寫法,不會遇到重複的情況。

A2:
嘗試修正於phase 2。
如果遇到這個組合,就重新選擇題目。

Capture

Phase 2

1個讚

@Laurence 謝謝你的提醒,我剛剛跑了步驟解析,發現:
如果答案是B的情況下,在B把A蓋過去以後,我忘記把follower數量刷新,所以原本玩起來是有問題的。我在while裡面重新加了一個 a_count = a[“follower_count”]
目前跑起來好像比較正常了。

可以再麻煩你跟 @timaskwhy 如果有空的話,可以看看有沒有什麼其他可以優化的建議,或是我發現沒看到的bug。沒時間的話也不要緊,我再參考你們的流程多練習一下,感謝你們:pray:

Hi Andy,

客氣了,一起學習。
我目前看到的問題,如下。

1. import的方式。

art.py,算是自己定義的module,用import匯入,print(logo),會報錯誤。
所以,才寫成print(art.logo),我猜由來是這樣。
我不清楚,這樣寫合不合乎,正常流程。
目前,學習課程到現在,沒有看過老師這樣用。

該用import或from/import,可以參考這篇文章。

Python 的 Import 陷阱

https://medium.com/pyladies-taiwan/python-的-import-陷阱-3538e74f57e3

我自己的解讀是,import或from/import,可以正常的使用在built-in module/function。
非built-in module/function,像art.py,就只能用from/import。
才可以使用print(logo),而非使用print(art.logo)。

2. 先試跑一次性的流程。

把Line 55之後的code,comment起來。
看一下,成立與不成立的結果。
一次性的流程,如果對了,再來加while loop。

3. ?

哈,我不知道這一個標題,該用什麼命名。
一般而言,import完後,會開始寫code。
一段code,會被重複執行的,就會寫成def function。
def function通常(我的認知),會放在import下面。
非def function的,例如,print(logo),在最後一個def function下面,開始。

4. 把大問題,切成數個小問題。

def compare(a_count, b_count, answer, game_continue)
這個裡面,要做的事情有點多,可以再拆成,幾個小def function,有助於debug。

剛剛才了解,為什麼我會遇到這個問題,老師的寫法則不會。XD

在Phase 1裡的,get_answer( ) function,我用了elif。

def get_answer(index_a, index_b):
    player_a = data[index_a]["follower_count"]
    player_b = data[index_b]["follower_count"]
    print(f"\nA_score: {player_a}")
    print(f"B_score: {player_b}")
    if player_a > player_b:
        return "A"
    elif player_b > player_a:
        return "B"

老師的寫法,是else。

def check_answer(guess, a_followers, b_followers):
  """Checks followers against user's guess 
  and returns True if they got it right.
  Or False if they got it wrong.""" 
  if a_followers > b_followers:
    return guess == "a"
  else:
    return guess == "b"
1個讚