专栏名称: 廖雪峰
业余马拉松选手廖雪峰的公众号,各种鸡汤混杂负能量,心理承受能力不强者慎重订阅。
目录
相关文章推荐
陈忻儿童心理  ·  成功案例背后有什么秘诀? ·  3 天前  
武志红  ·  成年人,可以为自己的委屈负责 ·  4 天前  
51好读  ›  专栏  ›  廖雪峰

用MarsCode AI编程助手高效刷题

廖雪峰  · 公众号  ·  · 2024-10-23 09:19

正文

对许多软件开发的初学者来说,为了提高自己的编程能力,也为了应对面试,大多数人都会选择LeetCode这个神奇的刷题平台,它提供了海量的算法题目,涵盖了各种编程语言和难度级别,让我们可以在这个平台上练习和学习。

不过,在LeetCode上刷题,我们往往会遇到一些问题,比如题目太难,没有思路,即使直接参考别人给出的最终代码,也无法完全理解。

这时,我们可以用豆包MarsCode AI的刷题助手来帮助我们,在刷题过程中,遇到代码问题,先让AI给出思路,不行再给出参考代码,这样一步一步地完成,可以帮助我们更好地理解和掌握算法。

在MarsCode上刷题不需要安装任何软件,直接在线打开:

左侧选择题目,右侧与AI交互,中间部分写代码运行,当然也可以自己输入题目。

我们选择一个难度中等的经典题目:计算类似3+4*5/(3+2)这样的简单四则运算:

切换到Python语言,然后开始编写代码。 如果完全没有思路,可以先让AI给出提示:

根据提示,我们可以尝试写出代码如下:

def solution(expression):    ops = [] # 存储运算符    nums = [] # 存储数字    for ch in expression:        if '0' <= ch <= '9':            nums.append(int(ch))        elif ch =='(':            ops.append(ch)        elif ch == ')':            top = ops.pop()            while top !='(': # 匹配最近的一个(                n2 = nums.pop()                n1 = nums.pop()                r = calc(top, n1, n2)                nums.push(r)
def calc(op, n1, n2): match op: case '+': return n1 + n2 case '-': return n1 - n2 case '*': return n1 * n2 case '/': return n1 // n2 raise ValueError(f'invalid op: {op}')

写着写着没有思路了怎么办?可以让AI给出代码提示:

注意到AI给出的提示代码不是样板代码,而是根据我们自己编写的代码来改进的,它提示了一个编码错误(应该是append而不是push),补充了一行漏掉的关键代码(ops.append(ch)),将solution()函数写完了,并定义了一个has_higher_priority()函数来比较运算符优先级。

不过这个has_higher_priority()函数扩展性不是很好,我们把它改进一下:

OP_PRIORITY = { '*': 2, '/': 2, '+': 1, '-': 1, '(': 0 }
def has_higher_priority(op1, op2): return OP_PRIORITY[op1] >= OP_PRIORITY[op2]

这样我们就借助AI完成了所有代码的编写。在线运行一下,可以得到正确的结果,如果结果有误,还可以在线调试,找到错误并修正。

虽然这道编程的题目已经得到解决,但如果我们想要进一步扩展一下,比如计算带有变量的表达式如3+A*5/(B+2),怎么破?

如果没有思路,可以继续让AI给出提示:

AI给出的方案是给solution()函数增加一个dict参数,用于存储变量的值,然后对数字压栈时判断,如果是变量,则取出变量的值再压栈。

根据提示,我们写出最终能处理变量的代码如下:

def solution(expression, vars_dict):    ops = [] # 存储运算符






请到「今天看啥」查看全文