首页 > 其他分享 >书生浦语实战训练营第四期作业

书生浦语实战训练营第四期作业

时间:2024-10-25 18:18:18浏览次数:3  
标签:第四期 Python 安装 训练营 python pip debug 断点 浦语

书生浦语实战训练营第四期任务二:Leetcode 383和Vscode连接InternStudio debug笔记

文章目录


前言

书生浦语实战训练营第四期,海量算力以及许多实战知识等你来获取,微信扫描二维码即可参与,免费A100算力等你来获取:
在这里插入图片描述

python基础

一、Leetcode 383

代码如下:

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        mp = [0] * 26
        for i in magazine:
            mp[ord(i) - ord('a')] += 1
        for i in ransomNote:
            mp[ord(i) - ord('a')] -= 1
            if mp[ord(i) - ord('a')] < 0:
                return False
        return True
        

在这里插入图片描述

二、Vscode连接InternStudio debug笔记

1.创建并激活虚拟环境

conda create --name myenv python=3.9
conda activate myenv

2.使用pip安装指定包

在Python开发中,安装和管理第三方包是日常任务。pip是Python官方的包管理工具,全称为“Python Package Installer”,用于方便地安装、升级和管理Python包。

注意在使用conda的时候,我们需要先激活我们要用的虚拟环境,再在激活的虚拟环境中,使用pip来安装包。pip安装包的命令为pip install。

pip install <somepackage> # 安装单个包,<somepackage>替换成你要安装的包名
pip install pandas numpy # 安装多个包,如panda和numpy
pip install numpy==2.0 # 指定版本安装
pip install numpy>=1.19,<2.0 # 使用版本范围安装

如果你有一个包含所有依赖信息的requirements.txt文件,可以使用-r一次性安装所有依赖。requirements.txt在各种开源代码中经常可以看到,里面描述了运行该代码所需要的包和对应版本。

pip install -r requirements.txt

为了节省大家的存储空间,本次实战营可以直接使用share目录下的conda环境,但share目录只有读权限,所以要安装额外的包时我们不能直接使用pip将包安装到对应环境中,需要安装到我们自己的目录下。

这时我们在使用pip的时候可以使用–target或-t参数来指定安装目录,此时pip会将你需要安装的包安装到你指定的目录下。

这里我们用本次实战营最常用的环境/root/share/pre_envs/pytorch2.1.2cu12.1来举例。

# 首先激活环境
conda activate /root/share/pre_envs/pytorch2.1.2cu12.1

# 创建一个目录/root/myenvs,并将包安装到这个目录下
mkdir -p /root/myenvs
pip install <somepackage> --target /root/myenvs

# 注意这里也可以使用-r来安装requirements.txt
pip install -r requirements.txt --target /root/myenvs

要使用安装在指定目录的python包,可以在python脚本开头临时动态地将该路径加入python环境变量中去

import sys  
  
# 你要添加的目录路径  
your_directory = '/root/myenvs'  
  
# 检查该目录是否已经在 sys.path 中  
if your_directory not in sys.path:  
    # 将目录添加到 sys.path  
    sys.path.append(your_directory)  
  
# 现在你可以直接导入该目录中的模块了  
# 例如:import your_module

三、 使用本地Vscode连接InternStudio开发机

上一章有详细内容,如何使用vscode远程连接:完成SSH连接与端口映射

四、使用vscode连接开发机进行python debug

1.使用Vscode进行Python debug的流程

Step1.安装Python扩展

  1. 打开VSCode,点击左侧扩展栏,搜索Python,并安装。

Step2配置调试

  1. 打开你的Python文件,点击左侧活动栏的“运行和调试”图标。

  2. 首次debug需要配置以下,点击“create a launch.json file”,选择python
    debugger后选择“Python File” config。

  3. 可以直接编辑生成的launch.json文件,配置调试参数,比如添加config(Add Configuration)等。
    在这里插入图片描述

Step3.设置断点
在代码行号旁边点击,可以添加一个红点,这就是断点(如果不能添加红点需要检查一下Python扩展是否已经正确安装)。当代码运行到这里时,它会停下来,这样你就可以检查变量的值、执行步骤等。接下来,我们在第4行的核心代码处打上断点。
在这里插入图片描述

Step4.启动debug

点击VSCode侧边栏的“Run and Debug”(运行和调试),选择调试配置后,点击绿色箭头(开始调试)按钮,或者按F5键。
在这里插入图片描述

Step5.查看变量
当代码在断点处停下来时,你可以查看和修改变量的值。在“Run and Debug”侧边栏的“Variables”(变量)部分,你可以看到当前作用域内的所有变量及其值。
在这里插入图片描述

Step6.单步执行代码
在这里插入图片描述

debug面板各按钮功能介绍:

continue: 继续运行到下一个断点。

step over: 单步跳过,可以理解为运行当前行代码,不进入具体的函数或者方法。

step into: 单步进入。如果当前行代码存在函数调用,则进入该函数内部。如果当前行代码没有函数调用,则等价于step over。

step out: 单步退出函数,返回到调用该函数的上一层代码。

restart: 重新启动调试。

stop: 终止调试。

Step7.修复错误并重新运行

如果你找到了代码中的错误,可以修复它,然后重新运行debug来确保问题已经被解决。

通过遵循以上步骤,你可以使用VSCode的debug功能来更容易地找到和修复你Python代码中的错误。可以自己编写一个简单的python脚本,并尝试使用debug来更好的理解代码的运行逻辑。记住,debug是编程中非常重要的一部分,所以不要怕花时间在这上面。随着时间的推移,你会变得越来越擅长它!

2.不同的断点

在调试(Debug)过程中,断点(Breakpoint)允许程序员在程序的执行流程中设置暂停点。当程序运行到这些断点时,执行会暂时中断,使得我们可以检查此时程序的状态,包括变量的值、内存的内容等。断点为我们提供了一个观察程序运行细节的机会,从而帮助我们定位和解决程序中的错误或问题。在VSCode中,我们还可以设置条件断点,这样断点只有在满足特定条件时才会触发。

  1. 普通断点:在代码行号左侧点击,添加断点。
  2. 条件断点:在断点标记上右键,选择条件断点(conditional breakpoint)。VSCode 中常用的条件断点主要有三种类型:
    i. 表达式(Expression):输入一个 Python 表达式,每次触发断点时运行该表达式,当表达式的值为 True 时 VS Code
    会暂停执行。例如:x == 10
    ii. 触发计数(Hit Count):断点触发计数达到输入值时才会暂停运行。
    iii. 记录日志(Log Message):触发该断点时在 Debug Console 中输出指定信息,实际上就是
    logpoint。需要输入要输出的信息,如果要用到表达式,可以使用 {} 将表达式括起来。例如,每次记录变量 i 的值可以写
    x={i}。

表达式条件断点
比如我们想让代码在 i=end-1 时停下来,可以这样设置: 在断点处右键选择“条件断点”,然后输入条件 i == end-1。
在这里插入图片描述

回车保存断点,然后运行debug,可以看到程序在i=9的时候停了下来,此时各变量的值如下
在这里插入图片描述

触发计数条件断点
如果我们想让sum_res+=i在运行5次后停下来,我们可以在这行设置Hit count断点为5。
在这里插入图片描述

运行debug后,程序第一次暂停时各变量的状态为

在这里插入图片描述

记录日志条件断点

在Log Message输入 Current i is {i} 每次触发时记录一下 i 的值
在这里插入图片描述

总结

本任务熟悉了python的基础操作,以及如何使用vscode调试代码。

标签:第四期,Python,安装,训练营,python,pip,debug,断点,浦语
From: https://blog.csdn.net/qq_30731313/article/details/143163378

相关文章

  • 书生浦语全链路介绍
    模型性能天梯图推理能力:综合推理能力领先社区开源模型支持100万字上下文(短期记忆):相较于gpt4o是100倍的量级自主规划和搜索完成复杂任务:通过信息搜索和整合,针对复杂问题撰写专业回答,效率提升60倍核心技术思想在于:数据迭代反馈,仍然是数据质量驱动的模型性能,对于数据质量提......
  • 代码随想录算法训练营第24天(补第13天)|226.翻转二叉树, 101. 对称二叉树,104.二叉树的最
    226.翻转二叉树文章链接:https://programmercarl.com/0226.翻转二叉树.html#算法公开课题目链接:https://leetcode.cn/problems/invert-binary-tree/description/迭代法:这里使用了前序遍历来交换左右孩子节点classSolution{public:TreeNode*invertTree(TreeNode*r......
  • 代码随想录算法训练营day25| 491.递增子序列 46.全排列 47.全排列2
    学习资料:https://programmercarl.com/0491.递增子序列.html#算法公开课排列与组合的区别,不用startIndex,而每个树层都从0开始,但是要跳过已经用过的数(用used判断)学习记录:491.递增子序列(添加一个数组used(hash表),来保持数组每个位置上的数的使用情况,没用过为0,用过变成1)点击查看代......
  • 代码随想录算法训练营第24天(补第12天)| 递归遍历,迭代遍历,统一迭代
    前置知识二叉树的定义:structBNode{intval;BNode*lchild;BNode*rchild;BNode():lchild(NULL),rchild(NULL){}BNode(intval){val=val;lchild=rchild=NULL;}};递归遍历文章链接:https://programmercarl.com/二叉树的递归遍历.html#思路题目......
  • 2024牛客暑期多校训练营9 B.Break Sequence
    设\(f_i\)表示最后一个区间以\(a_i\)结尾的方案总数,也即前\(i\)个数的方案总数。最后的答案是\(f_n\)。很容易得到转移方程:\[f_i=\sum_{j=1}^{i-1}f_j\]其中,需要保证\(a_i\sima_j\)是一个合法区间才能累加,这个检查的过程可以通过\(j\)倒序并计算不合法的数的个......
  • 代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串
    1leetcode151.翻转字符串里的单词题目链接:151.反转字符串中的单词-力扣(LeetCode)文章链接:代码随想录视频链接:字符串复杂操作拿捏了!|LeetCode:151.翻转字符串里的单词_哔哩哔哩_bilibili自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作,......
  • 代码随想录算法训练营第二十四天|Day24 回溯算法
    93.复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/思路char**result;intresultTop;intsegments[3];intisValid(char*s,intstart,intend){......
  • 青训营 X 豆包MarsCode 技术训练营--小C的外卖超时判断
    题目小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。已知小C在时刻t1点了外卖,外卖平台上显示的预计送达时间为t2,而实际送达时间为t3。需要判断外卖是否超时。如果外卖超时,则输出“Yes”;否则输出“No”。实际送达时间与预计送达时间在2......
  • 代码随想录算法训练营 | 岛屿数量 深搜,岛屿数量 广搜,岛屿的最大面积
    岛屿数量深搜题目链接:岛屿数量深搜文档讲解︰代码随想录(programmercarl.com)日期:2024-10-23想法:Java代码如下:importjava.util.Scanner;publicclassMain{publicstaticint[][]dir={{0,1},{1,0},{-1,0},{0,-1}};publicstaticvoiddfs(boolean[][]v......
  • 代码训练营第22天|补第9天的KMP算法,28. 找出字符串中第一个匹配项的下标|459.重复的子
    前置知识文章链接:https://programmercarl.com/0028.实现strStr.html#思路KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。前缀表:next数组就是一个前缀表(prefixtable)。前缀表是用来回退的,它记录了模式串与主......