刷题实践选题 | 豆包MarsCode AI刷题

77 阅读7分钟

AI刷题是如何帮助我学习的?

  • 刷题实践:总结 AI 刷题的优势之处,并通过实践案例展开分析相关功能是如何帮助你学习的;

以该题为例:不同整数的计数问题(中)

问题描述

小R有一个字符串 word,该字符串由数字和小写英文字母组成。小R想用空格替换每一个不是数字的字符。然后,他希望统计在替换后剩下的整数中,不同整数的数目。

例如,给定字符串 "a123bc34d8ef34",替换后形成的字符串是 " 123 34 8 34",剩下的整数是 "123""34""8" 和 "34"。不同的整数有三个,即 "123""34" 和 "8"

注意,只有当两个整数的不含前导零的十进制表示不同,才认为它们是不同的整数。


测试样例

样例1:

输入:word = "a123bc34d8ef34"
输出:3

样例2:

输入:word = "t1234c23456"
输出:2

样例3:

输入:word = "a1b01c001d4"
输出:2


实践

借助 AI 理清思路

我首先会思考看到这道题,我的思路是什么,在还不确定的自身的思路方向时,可以去参考ai对于这题的思路看法。然后,内化为自己的知识点。

  • 我的思路:提取数字,然后去重,统计个数。对于python不够熟悉的我,因为有豆包ai更为便捷。

  • 确定思路方向:当没有思路或者想要确定一下方向是否正确时,可以使用豆包ai的让它帮你找下思路提示

    image.png

    这时候,我们可以更调理清晰的整理一下整体的思路步骤

    • 提取数字,可以将非数字字符替换成空格
    • 提取替换后的整数
    • 统计不同整数的数目

借助 AI 给予代码提示 和 检查代码

对于上述思路,你的代码逻辑该怎么写,当遇到哪些不太懂得问题时,可以咨询ai,让它帮你找找代码提示,也可以让它帮你检查一下编辑区的代码。

  • 代码提示:当写代码遇到困难时,可以使用豆包ai给你一点代码提示,或者是问它你需要找的具体问题实现可以找豆包ai

    image.png image.png

    它会基于关键步骤的给予解释,更便于我们学习。

  • 借助AI帮忙检查代码

    image.png

当出现问题时

当出现问题时,我们可以进行调试,查看各个步骤的输出,找出问题所在,然后针对性解决问题。以该题为例:

找出问题所在
  • 经过调试,我发现这个样例报错了 image.png

  • 进行调试,排除干扰因素,查看该样例的各步的输出 image.png

  • 我发现它是因为没有去除前导零就直接进行去重,这时候是无法去除未去前导零的数值的。


借助AI查询对应知识点 解决该问题
  • 那这时候,就可以咨询豆包ai,在python该如何去除前导零image.png image.png

  • 添加对应的步骤(去除前导零的代码),检查输出,检查无误,成功输出。 image.png


完整代码
import re
def solution(word: str) -> int:
    # 替换非数字字符为空格
    word = re.sub(r'\D', ' ', word)

    # 使用正则表达式提取整数
    numbers = re.findall(r'\d+', word)

    # 去前导零
    numbers = [str(int(num)) for num in numbers]
    
    # 使用集合去重
    unique_numbers = set(numbers)

    return len(unique_numbers)

if __name__ == '__main__':
    # print(solution("a123bc34d8ef34") == 3)
    # print(solution("t1234c23456") == 2)
    print(solution("a1b01c001d4"))  #== 2)
image.png

恭喜顺利通过!


借助AI进行知识点总结梳理

使用AI进行知识点总结,便于整理复习。

  • 提示词:请帮我总结整理本题出现的知识点 image.png image.png
  • 这时候,我们就可以从中提炼自己需要记忆的重要知识点,并自行总结整理。因为有边刷题边AI的存在,这省去了以往我们需要在茫茫大海中找寻对应知识点的时间,更节省时间,更利于学习。

本题涉及知识点总结:

参考AI的总结整理,我们进行知识点总结提炼,写成笔记,便于记忆。

1. re 模块
  • 用途:用于处理正则表达式 + 字符串中查找和匹配特定模式

  • 功能

    • 匹配:查找字符串中是否包含某个模式。
    • 搜索:查找字符串中第一个匹配某个模式的子串。
    • 替换:将字符串中匹配某个模式的子串替换为指定的字符串。
    • 分割:根据匹配某个模式的子串将字符串分割成多个部分。
  • re模块的主要方法

    • re.sub(pattern, repl, string):将字符串中所有匹配 pattern 的部分替换为 repl,返替换后的字符串。

    • re.findall(pattern, string):返回字符串中所有匹配 pattern 的子串,返回列表。(搜索

    • re.match(pattern, string):从字符串的起始位置匹配模式,如果匹配成功,返回一个匹配对象;否则返回 None

    • re.search(pattern, string):在字符串中搜索第一个匹配模式的子串,如果匹配成功,返回一个匹配对象;否则返回 None

    • re.split(pattern, string):根据匹配模式的子串将字符串分割成多个部分,返回一个列表。

    • 以上方法使用前,需在开头引入re模块:import re

正则表达式模式
  • \d:匹配任意数字字符(相当于 [0-9])。
  • \D:匹配任意非数字字符(相当于 [^0-9])。
  • \w:匹配任意字母、数字或下划线字符(相当于 [a-zA-Z0-9_])。
  • \W:匹配任意非字母、数字或下划线字符(相当于 [^a-zA-Z0-9_])。
  • \s:匹配任意空白字符(包括空格、制表符、换行符等)。
  • \S:匹配任意非空白字符。
  • .:匹配任意字符(除了换行符)。
  • +:匹配前面的字符一次或多次
  • *:匹配前面的字符零次或多次。
  • ?:匹配前面的字符零次或一次。
  • ^:匹配字符串的起始位置。
  • $:匹配字符串的结束位置。
  • 例子:
    • word = re.sub(r'\D', ' ', word)
    • numbers = re.findall(r'\d+', word)

2. 集合(Set)--->自动去重
  • 集合去重:使用集合set)来存储不同的整数,自动去重。e.g:unique_numbers = set(numbers)

3. 列表推导式

列表推导式 的通用写法: new_list = [expression for item in iterable]

  • expression:对 item 进行的操作或表达式。
  • item:从 iterable 中取出的每个元素。
  • iterable:可迭代对象(如列表、元组、字符串等)。
  • 注:用于简化列表的创建和处理

例子:numbers = [str(int(num)) for num in numbers]

  • 作用:遍历列表中的每个元素num,对其一一处理(将字符串转为整型,在转换成字符串,以去除前导零),最终生成一个新的列表。
    • 遍历列表 for num in numbers
    • 类型转换:将字符串转换为整型(int),然后再转换回字符串(str),以去除前导零
      • 转整型int(num)(可以去除前导零)
      • 将整形转为字符串str(int(num)
    • 生成新的列表[str(int(num)) for num in numbers]

关键点汇总
  • 字符串处理:使用 re.sub 替换非数字字符。
  • 正则表达式:使用 re.findall 提取整数。
  • 集合去重:使用集合自动去重。
  • 列表推导式:简化列表处理。
  • 类型转换:去除前导零。

感受

使用AI刷题,在节省时间的基础上,能摄取到更多的知识点;也更便于知识的梳理;具体问题具体分析,更具有针对性的提出相应的解决方案。感受相当良好,时代的便捷,学会如何使用ai 还是很有必要的。