课程代码、课件及其他相关资料地址
https://gitee.com/wilsonyin/zero-basics-python
作者回复: 这时候最精确的统计办法是用正则表达式,把原始字符串过滤一遍, 将字母外的特殊字符给替换为空
作者回复: 你的代码中统计 "my" 出现次数的问题在于你是如何处理字符串的。当你使用 `split(' ')` 方法时,它会根据空格进行分割,但这样分割的结果可能会包含换行符、标点符号等。 在你给出的文件信息中,"my" 后面紧跟着一个空格和换行符,因此 `split(' ')` 之后,"my" 的实际内容变成了 `"my\n"`,所以 `.count("my")` 返回了0。 你可以通过以下方式修正代码: 1. **使用正则表达式进行分割**:这样可以更精确地控制分割的行为。 2. **在分割后移除非字母字符**:你可以使用 `strip()` 方法移除每个单词的首尾非字母字符。 以下是一个修改后的代码示例: ```python import re file_data = ['what is you name?\n', '\n', 'my name is test1!\n', '\n', 'what about you?\n', '\n', 'my name is test2!\n', '\n', 'hei,boy\n', '\n', 'SEE YOU'] text = " ".join(file_data) words = re.findall(r'\b\w+\b', text) # 统计my出现的次数 print(words.count("my")) # 输出2 # 统计is出现的次数 print(words.count("is")) # 输出3 ``` 这个代码使用了正则表达式 `\b\w+\b` 来分割文本,这样可以确保只得到完整的单词。结果是 "my" 出现了2次,"is" 出现了3次。
作者回复: https://github.com/wilsonyin123/python_productivity 对应每一课的代码,也可以通过第一课下的链接下载全部代码和演示文本
作者回复: set 的内部实现是基于散列表 (hash table) 的。因此,集合中元素的顺序并不是它们被添加时的顺序,而是基于它们的哈希值。简而言之,当你向集合中添加一个元素时,Python 会计算该元素的哈希值并使用这个哈希值来决定它在集合中的位置。 空字符串的哈希值是确定的,并且当你在一个集合中有多个空字符串时,它们的哈希值都是相同的。所以,当你将它们添加到集合中时,只有一个会被保留。
作者回复: Pycharm下建立。venv里应当只包含Python虚拟环境的内容(Python相关程序python、pip、jupyter等,虚拟环境下下载到本地的python第三方库)
作者回复: 你所遇到的问题与字符串分割和统计的方式有关。让我们分析一下你的代码。 ### 代码分析 1. `str(ass).count("d")`:这一行统计的是整个列表转换为字符串后 `"d"` 字符的出现次数。确实有5个 `"d"`,所以输出为5。 2. `str(ass).split(" ").count("d")`:这一行首先将整个列表转换为字符串,然后使用空格 (`" "`) 进行分割。分割后的列表为: ```python ['["1', '2', '3', '4', '5', '6","a', 's', 'd', 'd', 'd', 'd', 'd"]'] ``` 在这个列表中,`"d"` 出现了4次,所以输出为4。 ### 为什么会有这个差异? 问题在于 `str(ass).split(" ")` 使用空格作为分隔符,而列表转换为字符串后包含许多其他字符,例如引号和逗号。这导致分割后的结果并不是单纯的单词和字符,而是包括了这些额外的字符。 ### 解决方案 如果你想统计原始字符串中 `"d"` 的出现次数,你可以首先将字符串连接起来,然后统计 `"d"` 的出现次数,如下所示: ```python ass = ["1 2 3 4 5 6", "a s d d d d d"] text = " ".join(ass) print(text.count("d")) # 输出5 ``` 这样你将得到与原始字符串中 `"d"` 的实际出现次数相符的结果。
作者回复: User Avatar 在Python中,使用`readline()`方法确实只能读取文件的一行。如果你想要读取整个文件的内容,可以使用`readlines()`方法或者遍历文件对象来逐行读取整个文件。 以下是两种读取整个文件内容的方法: 1. 使用`readlines()`方法: with open("文件路径", "r") as file: lines = file.readlines() for line in lines: # 对读取的每一行进行处理 print(line.strip()) 上述代码中,`readlines()`方法用于读取所有行,并将它们存储在列表`lines`中。然后,你可以遍历该列表来处理每一行。 2. 遍历文件对象: with open("文件路径", "r") as file: for line in file: # 对读取的每一行进行处理 print(line.strip()) 在这种方法中,直接遍历文件对象,每次迭代会读取文件的下一行,并将其存储在变量`line`中。你可以在循环中对每一行进行处理。 请确保将代码中的"文件路径"替换为你实际文件的路径。 希望以上方法能够帮助你读取完整的文件内容。如果还有其他问题,请随时提问。
作者回复: 统计字符时,要保证时字符串,才能使用字符串内置方法,所以将它们统统转成了字符串, 而转换成int是对统计之后的数字做的处理。 统计之后虽然显示为数字,也可能为“123” 这样的形式, 在Python里面“123” 和123 前者只能使用字符串内置方法, 后者只能使用整数内置方法。我是为了计算,才将“123”使用int()函数转换为整数,用于做计算的。如果还有问题,可以群里将代码贴出来,我们详细讨论