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的让它帮你找下思路提示
这时候,我们可以更调理清晰的整理一下整体的思路步骤:
- 提取数字,可以将非数字字符替换成空格
- 提取替换后的整数
- 统计不同整数的数目
借助 AI 给予代码提示 和 检查代码
对于上述思路,你的代码逻辑该怎么写,当遇到哪些不太懂得问题时,可以咨询ai,让它帮你找找代码提示,也可以让它帮你检查一下编辑区的代码。
-
代码提示:当写代码遇到困难时,可以使用豆包ai给你一点代码提示,或者是问它你需要找的具体问题实现可以找豆包ai
它会基于关键步骤的给予解释,更便于我们学习。
-
借助AI帮忙检查代码
当出现问题时
当出现问题时,我们可以进行调试,查看各个步骤的输出,找出问题所在,然后针对性解决问题。以该题为例:
找出问题所在
-
经过调试,我发现这个样例报错了
-
进行调试,排除干扰因素,查看该样例的各步的输出
-
我发现它是因为没有去除前导零就直接进行去重,这时候是无法去除未去前导零的数值的。
借助AI查询对应知识点 解决该问题:
-
那这时候,就可以咨询豆包ai,在python该如何去除前导零。
-
添加对应的步骤(去除前导零的代码),检查输出,检查无误,成功输出。
完整代码
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)
恭喜顺利通过!
借助AI进行知识点总结梳理
使用AI进行知识点总结,便于整理复习。
- 提示词:请帮我总结整理本题出现的知识点
- 这时候,我们就可以从中提炼自己需要记忆的重要知识点,并自行总结整理。因为有边刷题边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 还是很有必要的。