作者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/cn.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