书生 ⋅ \cdot ⋅共学大模型实战营第四期
本系列为InterLM 闯关作业个人完成情况分享
欢迎加入书生大模型实战训练营,赢取A100算力,丰富实战经验,完成实际项目,解锁更多可能!
Reference: https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python
Affiliation: University of Science & Technology of China
Organization: Shanghai Artificial Intelligence Laboratory
Contact: zhangsy2023@mail.ustc.edu.cn
L0-G200 Python基础知识
闯关任务1
任务描述:Leetcode 383(展示提交代码与leetcode提交通过截图)
leetcode常规题目,检查字符串a能否由字符串b中的元素构成,相比算法知识,该题目放在python基础一节的主要目的是考察python基本语法知识。两种直观的解法:
【解法1】
def canConstruct(a: str, b: str) -> bool:
source, target = list(a), list(b)
for item in target:
if item in source:
source.remove(item)
return len(source) == 0
该解法需要了解list()
可以将序列转化为列表,lst.remove(ele)
在列表lst中删除第一个值为ele的元素(如没有这样的元素则报错)。类似的,python中列表的常用操作还有list.append(ele), list.pop(ele), list.insert(pos, ele), del(pos), index(ele), count(ele), list.reverse(), list.sort(), list.clear()
等,可用于列表元素的增删改查。例如,可以使用append和pop操作模拟栈的入栈、出栈操作。
【解法2】
from collections import Counter
def canConstruct(a: str, b: str) -> bool:
return Counter(a) <= Counter(b)
Counter是python中内置的一种计数类(广义),包含一组元素(Key)和与每个元素对应的一组计数(Value),其中Key具有唯一性。这里的技术可以抽象地理解为与元素具有对应关系的一个数值,当Counter实例由字符串构建时,Key为不同字符,Value即为每个字符在串中出现的次数;由字典构建时,Key为字典的键,Value为对应的键值。当a中每个Key的Value都不大于b中对应的Key时,Counter(a) <= Counter(b)
成立。
闯关任务2
任务描述:VSCode连接InternStudio debug笔记
任务1解法1的本地调试版本代码为:
def canConstruct(ransomNote: str, magazine: str) -> bool:
source, target = list(ransomNote), list(magazine)
for item in target:
if item in source:
source.remove(item)
return len(source) == 0
if __name__ =="__main__":
ransomNote = "iloveyou"
magazine = "youloveme"
if canConstruct(ransomNote, magazine):
print("True")
else:
print("False")
以任务1解法1代码为例,如果想要更进一步发现问题,可以在添加断点后,右键圆形红点,选择编辑断点:
之后可以选择满足表达式结果时中断、断点行触发达到一定次数时中断或断点命中时记录自定义信息(输出到调试控制台)。
我们以解法1的程序为例,选择输出日志信息,可以看到每次执行到source.remove(item)
时两个字符串的当前内容:
至此可以清晰地看到在程序执行过程中,两个字符串内容的变化。
任务3 conda环境配置和使用
任务描述:使用VSCode连接开发机后使用pip install -t命令安装一个numpy到看开发机/root/myenvs目录下,并成功在一个新建的python文件中引用。
如果想要将环境myenv
安装到自定义目录/root
而不是conda默认安装路径,需要将传统命令conda create -n myenv python=xxx
进行调整:
conda create --prefix /root/myenv python=3.9
文档中没有强调的是,如果要VSCode能够识别自定义解释器路径,则需要点击输入解释器路径:
然后自行输入,以/root/myenv
路径下创建的环境为例,python解释器路径为/root/myenv/bin/python3.9
。
使用pip install numpy --target /root/myenv
将numpy下载到自定义路径下,编写以下测试代码:
import sys
my_directory = '/root/myenv'
if my_directory not in sys.path:
sys.path.append(my_directory)
import numpy as np
a = np.array([2024, 10, 24])
print(a)
这样系统就可以识别出numpy安装的路径,运行结果如下: