作者Farrenhi (Farrenhi)
看板StudyGroup
標題[戰友] 轉職軟體工程師 cs61a Berkeley python
時間Thu Apr 13 15:32:41 2023
1. 自介:準備轉職軟體工程師的人
2. 對象:也想要自學上這門課的人
UC Berkeley
本課程使用python語言 並且在介紹python
CS 61A: Structure and Interpretation of Computer Programs
為什麼是這門課這些文章有介紹
https://inst.eecs.berkeley.edu/~cs61a/fa20/
https://zhuanlan.zhihu.com/p/456110373
https://zhuanlan.zhihu.com/p/486323075
https://zhuanlan.zhihu.com/p/403251949
https://zhuanlan.zhihu.com/p/432135426
3. 目標:將這門課修完 完成所有video q&a hw disc project
4. 原因:這門課將打下深厚的基礎 為什麼組團 我引用其中一篇文章提到的:
尋找一個夥伴
在開始學習之前,首先尋找一個同樣想學習這門課的夥伴,水平高低無所謂,但一定要是
有意學習這門課的人。這一點我認為非常重要,因為在學習公開課程的過程中,做實驗室
常常會遇到各種奇怪的錯誤,很可能會浪費一整個下午的時間卻還是無法解決問題,容易
產生極強的挫敗感,讓人長時間不想再碰這門課程。如果此時有個人能與你一起分享或幫
你解決問題,對你的學習進度有很大的幫助。
不要陷入只看課本和影片不做實驗室的陷阱中
這一點我深有體會。一開始,我僅僅看書和看影片,完全不碰實驗室。當時我的想法是等
全部學完後再來做實驗室,然而我發現學了很長一段時間後,除了寫了一些筆記,實際上
我什麼都沒有學到。這種學習方法,做了一大堆筆記,然後不復習,只是感動自己的做法
。實驗室是幫助你學習相關知識的好工具。(當然,筆記不是不好,但很多情況下,我們
不會仔細複習筆記。這樣就什麼都沒學到,反而浪費了時間。)
5. 地點:online 線上課程
6. 時間:各人自行上課 可以回報進度跟若有問題可以提出討論
7. 方式:請自行跟著課程網址開始按照進度完成
8. 範圍:cs61a所有課程
9. 人數限制:目前沒有限制
10.解散條件:無
11.運作規則:一邊進行 一邊摸索
我希望找一個方式很簡單 不用花彼此太多時間去維持跟管理
有興趣的人直接打開網址開始從week1跟著老師每一步去完成
我目前的進度到了:
lecture 1: videos and Q&A
lab00
lecture 2: videos and Q&A
HW01
lecture 3: videos and Q&A
lab01
lecture 4: videos and Q&A
disc01 (這個可以去fa21 有互動式介面可以完成)
有興趣的人直接開始並且推文回報進度到哪就可以了 或有問題也可以推文問
沒有群組 直接回應在推文內就好
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.11.1 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/StudyGroup/M.1681371165.A.91C.html
※ 編輯: Farrenhi (111.255.11.1 臺灣), 04/13/2023 15:33:29
Lab 2: Higher-Order Functions, Lambda Expressions
Q4: Count van Count
這一題很難 不是很好消化題目的敘述 加上要轉譯成其他寫法
這題真的是很難憑空寫出 不知道大家覺得如何
※ 編輯: Farrenhi (111.255.11.1 臺灣), 04/14/2023 15:02:24
disc02 solution
https://cs61a.org/disc/sol-disc02/
https://larynqi.com/assets/fa21/disc02-sol.pdf
Q10: Natural Chain
這題 larynqi有解釋 實在太精妙了 特別是h的最後一行 這種善用or的function
也太厲害...
※ 編輯: Farrenhi (111.255.43.249 臺灣), 04/16/2023 13:12:33
1F:→ gaowei16: 推 04/19 01:26
2F:推 hardy18: 推 04/22 01:51
3F:推 kelly2643: 推 05/01 22:04
目前卡在hog project Problem 5 (3 pt)...
※ 編輯: Farrenhi (162.227.165.109 美國), 05/20/2023 00:59:37
who = 0 # Who is about to take a turn, 0 (first) or 1 (second)
# BEGIN PROBLEM 5
"*** YOUR CODE HERE ***"
while (score0 < goal) and (score1 < goal):
if who == 0:
score0 += take_turn(strategy0(score0, score1), score1, dice)
if extra_turn(score0, score1):
who = other(who)
else:
score1 += take_turn(strategy1(score1, score0), score0, dice)
if extra_turn(score1, score0):
who = other(who)
who = other(who)
# END PROBLEM 5
這邊就是要注意 一次只能用跑一次take_turn 這樣才會跑出來while迴圈去驗證是否
滿足goal
※ 編輯: Farrenhi (162.227.165.109 美國), 05/20/2023 01:22:04
4F:推 gaowei16: 大大 你進度到哪了 06/28 16:20
中間荒廢了一陣子
目前結束了 Week3 0911 Lecture 7: decorator
回來做Hog project
Problem 4a: done
※ 編輯: Farrenhi (111.255.28.234 臺灣), 08/04/2023 15:09:01
lab02 有一題的答案很詭異 必須輸入關鍵字
>>> print_lambda = lambda z: print(z) # When is the return expression of a
lambda expression executed?
>>> print_lambda
______
>>> one_thousand = print_lambda(1000)
______
>>> one_thousand
nothing
nothing就是答案
※ 編輯: Farrenhi (111.255.28.234 臺灣), 08/04/2023 21:43:35
HOG
Problem 6 這題不容易 原來是要寫成這樣子 才會把n
遞迴繼承到下一個commentary function
say = say(score0, score1) # call "say", and then "say" becomes the new
commentary function
如果我只寫
say(score0, score1) 會發現只有部分cases能通過 到n + 1那個case就過不了
因為每次都重新讀一次say(...), n+1並沒有被丟到下一層去
※ 編輯: Farrenhi (111.255.56.140 臺灣), 08/09/2023 16:26:02
HOG
Problem 8
Question 8 > Suite 2 > Case 2
(cases remaining: 4)
>>> from hog import *
>>> dice = make_test_dice(3, 1, 5, 6)
這題有點小陷阱
如果沒有看仔細 會忽略了def roll_dice裡面的 pigout_count
因此會變成這個結果
4 11 4 11 總共1000個數去做平均
然而因為pigout_count
所以是
1 11 1 11 總共1000個數去平均
※ 編輯: Farrenhi (111.255.56.140 臺灣), 08/10/2023 11:38:19
HOG Problem11
OK這邊需要使用到 extra_turn()這個函數 注意放進去這個函數
的第一個argument 應該是當前分數
那當前分數是甚麼呢?
是score?
還是score + ?
因為擲出0就會有bacon score 所以要再加上這一項 才放進去extra_turn
if extra_turn(score + bacon_score, opponent_score):
return 0
※ 編輯: Farrenhi (111.255.40.96 臺灣), 08/11/2023 13:42:20
hw02: Recursion
Q2: Ping-pong
注意這一題 index + 1 這邊很特別 注意甚麼時候要扭轉
※ 編輯: Farrenhi (111.255.40.96 臺灣), 08/13/2023 20:53:09
※ 編輯: Farrenhi (111.255.33.15 臺灣), 09/05/2023 09:51:04
Cat project
problem 5
solution 1: 這個會通過
solution 2: 明明邏輯依樣卻不會通過...
solution 1:
def autocorrect(user_word, valid_words, diff_function, limit):
"""Returns the element of VALID_WORDS that has the smallest difference
from USER_WORD. Instead returns USER_WORD if that difference is greater
than LIMIT.
"""
# BEGIN PROBLEM 5
"*** YOUR CODE HERE ***"
for item in valid_words:
if item == user_word:
return item
min_valid_word = min(valid_words, key=lambda item:
diff_function(user_word, item, limit))
if diff_function(user_word, min_valid_word, limit) > limit:
return user_word
else:
return min_valid_word
# END PROBLEM 5
Solution 2:
def autocorrect(user_word, valid_words, diff_function, limit):
"""Returns the element of VALID_WORDS that has the smallest difference
from USER_WORD. Instead returns USER_WORD if that difference is greater
than LIMIT.
"""
# Initialize output and diff_value
output = user_word
diff_value = limit
for item in valid_words:
if item == user_word:
return item
current_diff = diff_function(user_word, item, limit)
if current_diff < diff_value:
diff_value = current_diff
output = item
return output
※ 編輯: Farrenhi (111.255.14.144 臺灣), 09/22/2023 23:11:22
CAT project
Problem 7:
def pawssible_patches(start, goal, limit):
"""A diff function that computes the edit distance from START to GOAL."""
# assert False, 'Remove this line'
if start == goal:
return 0
elif start == "" or goal == "":
return max(len(start), len(goal))
elif limit == 0:
return 10000
else:
if start[0] == goal[0]:
return pawssible_patches(start[1:], goal[1:], limit)
else:
add_diff = pawssible_patches(start[0:], goal[1:], limit - 1)
remove_diff = pawssible_patches(start[1:], goal[0:], limit - 1)
substitute_diff = pawssible_patches(start[1:], goal[1:], limit -
1)
return (min(add_diff, remove_diff, substitute_diff)) + 1
※ 編輯: Farrenhi (111.255.14.144 臺灣), 09/23/2023 19:09:01