1. 作业要求:
1.1 wordcount函数实现
请实现一个wordcount函数,统计英文字符串中每个单词出现的次数。返回一个字典,key为单词,value为对应单词出现的次数。
结果示例:
Input:
"""Hello world! This is an example. Word count is fun. Is it fun to count words? Yes, it is fun!"""
output:
{'hello': 1, 'world': 1, 'this': 1, 'is': 4, 'an': 1, 'example': 1, 'word': 1, 'count': 2, 'fun': 3, 'it': 2, 'to': 1, 'words': 1, 'yes': 1}
text = """ Got this panda plush toy for my daughter's birthday, who loves it and takes it everywhere. It's soft and super cute, and its face has a friendly look. It's a bit small for what I paid though. I think there might be other options that are bigger for the same price. It arrived a day earlier than expected, so I got to play with it myself before I gave it to her. """ def wordcount(text): pass
1.2 debug过程
请使用本地vscode连接远程开发机,将上面你写的wordcount函数在开发机上进行debug,体验debug的全流程,并完成一份debug笔记(需要截图)。
2. 作业实现
2.1 debug方式复习
首先用vscode的SSH插件连接开发机,然后创建python_demo.py文件,可以用之前的Linux的touch命令创建文件,创建文件夹是: mkdir
debug方式一:单个python文件的debug
首先选择python解释器,随后根据需要对相应的位置设置断点。
在代码行号旁边点击,可以添加一个红点,这就是断点(如果不能添加红点需要检查一下python extension是否已经正确安装)。当代码运行到这里时,它会停下来,这样你就可以检查变量的值、执行步骤等。
点击VSCode侧边栏的“Run and Debug”(运行和调试),然后点击“Run and Debug”(开始调试)按钮,或者按F5键。
单击后会需要选择debugger和debug配置文件,我们单独debug一个python文件只要选择Python File就行。然后你的代码会在达到第一个断点之前运行,在第一个断点处停下来。
当代码在断点处停下来时,你可以查看和修改变量的值。在“Run and Debug”侧边栏的“Variables”(变量)部分,你可以看到当前作用域内的所有变量及其值。
debug面板各按钮功能介绍:
-
1
: continue: 继续运行到下一个断点 -
2
: step over:跳过,可以理解为运行当前行代码,不进入具体的函数或者方法。 -
3
: step into: 进入函数或者方法。如果当行代码存在函数或者方法时,进入代码该函数或者方法。如果当行代码没有函数或者方法,则等价于step over。 -
4
: step out:退出函数或者方法, 返回上一层。 -
5
: restart:重新启动debug -
6
: stop:终止debug
debug的功能面板特别关键,这里需要详细了解每一个按钮的作用!!!
随后即可以逐步进行debug调试!
debug方式二:在vscode使用命令行进行debug
vscode支持通过remote的方法连接我们在命令行中发起的debug server。首先我们要配置一下debug的config。
还是点击VSCode侧边栏的“Run and Debug”(运行和调试),单击"create a lauch.json file"
选择debugger时选择python debuger。选择debug config时选择remote attach就行,随后会让我们选择debug server的地址,因为我们是在本地debug,所以全都保持默认直接回车就可以了,也就是我们的server地址为localhost:5678。
配置完以后会打开如下配置的json文件,但这不是重点,可以关掉。这时我们会看到run and debug界面有变化,出现了debug选项。
现在vscode已经准备就绪,让我们来看看如何在命令行中发起debug。如果没有安装debugpy的话可以先通过pip install debugpy安装一下。
python -m debugpy --listen 5678 --wait-for-client ./myscript.py
-
./myscript.py
可以替换为我们想要debug的python文件,后面可以和直接在命令行中启动python一样跟上输入的参数。记得要先在想要debug的python文件打好断点并保存。 -
--wait-for-client
参数会让我们的debug server在等客户端连入后才开始运行debug。在这就是要等到我们在run and debug界面启动debug。
先在终端中发起debug server,然后再去vscode debug页面单击一下绿色箭头开启debug。
如下所示,debug已经启动成功!即可正常开始debug
2.2 debug
编写的函数如下:
结果:
与文档提供的示例相同,函数编写基本正确。
这里注意以下二者的区别:
word_list = text.split()
word_list = text.split(" ")
text.split(" ")
-
使用
" "
作为分隔符,只在遇到单个空格时拆分。 -
如果有多个连续的空格(例如
" "
),会将这些连续的空格视为分隔符的一部分,因此会在结果中包含空字符串。
text.split()
-
split()
不带参数时,默认会将任意数量的空白字符(包括空格、制表符、换行符等)作为分隔符。 -
split()
会自动忽略字符串开头、结尾和中间的多余空白字符,因此不会在结果中包含空字符串。
debug方式一:
一步步操作,没有问题,可以看到断点附近的代码的输出结果!完成!
debug方式二:
出现问题,debug没有在断点停止,直接输出了最终的结果:
这里目前未解决,不知道啥原因?
8.9日再次找问题:
换了一个版本的python插件之后仍然出现同样的问题
但是用方式一是可以正常进行调式的,问题出在哪呢?
最后在根目录中启动server服务,然后进行debug,成功!
原因找到,问题出在json的配置路径中,路径映射
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "."
}
chatgpt的回答:
localRoot
:"${workspaceFolder}"
本地工作区的根目录,${workspaceFolder}
是 VSCode 中的一个变量,代表当前打开的工作区根目录。remoteRoot
:"."
远程主机上的工作目录。"."
表示远程 Python 进程的当前目录。
上述也能成功进行debug,问题主要在于localRoot的指定,指定为${workspaceFolder},即要从工作区的根目录进行命令行的debug进行调试;否则要指定一个路径,即可正常进行调试debug!
问题解决!
开心开心!