Py基礎組,將於2021/5/9 PM 9:00,進行Day 14課程討論。
相關資訊,更新於此
謝謝Laurence!
以下連結是這次我練習寫的code,試了幾次運作雖然貌似正常,不過遇到兩個問題:
- 因為function裡面有用到global scope的關係,似乎沒辦法把整個遊戲囊括進一個叫做game( )的function去跑,不知道這樣是不是不好
- 感覺還有其他重複的地方可以簡化為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。
如果遇到這個組合,就重新選擇題目。
Phase 2
@Laurence 謝謝你的提醒,我剛剛跑了步驟解析,發現:
如果答案是B的情況下,在B把A蓋過去以後,我忘記把follower數量刷新,所以原本玩起來是有問題的。我在while裡面重新加了一個 a_count = a[“follower_count”]
目前跑起來好像比較正常了。
可以再麻煩你跟 @timaskwhy 如果有空的話,可以看看有沒有什麼其他可以優化的建議,或是我發現沒看到的bug。沒時間的話也不要緊,我再參考你們的流程多練習一下,感謝你們
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"