鱼C论坛

 找回密码
 立即注册
查看: 1468|回复: 2

[已解决]求助

[复制链接]
发表于 2023-4-12 17:32:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# -*- coding: utf-8 -*-
'''

请只在 "
########## 下面可以改动

########## 上面可以改动 "
中间部分作答,作答行数自由调整

题目:定义一个函数,实现输入一句话,单词之间使用空格隔开,统计出其中各单词的词频数,
并以keyword:count的格式存在一个dict中,返回这个dict。
注意 jkl; 不是一个单词,jkl 是一个单词,要把“; + ”等非字符符号去掉
即输入:“abc fjf jkl+ abc abc jkl;” 结果是 {"abc":3,"fjf":1,"jkl":2}

'''

def TEST_DO_NOT_CHANGE(str_line):
    word_dict = {}
    ########## 开始作答
   

    str_line.strip(";")
    str_line.strip("+")
    str_line.join(" ")
    str_line
   
    words=str_line.split()
    for word in words:
     
        if word in word_dict:
            word_dict[word]+=1
        else:
            word_dict[word]=1
   
   
   


   
   
    ########## 结束作答  
            
    return word_dict  

            
if __name__ == "__main__":
    str_line = "abc fjf jkl+ abc abc jkl;"
    print(TEST_DO_NOT_CHANGE(str_line))
请问问题出在哪里了 如何用简单代码修改完成
最佳答案
2023-4-12 17:36:23
这段代码中存在几个问题:

1. `str_line.strip(";")` 和 `str_line.strip("+")` 不会修改原字符串,需要将修改后的结果赋值给一个变量。

2. `str_line.join(" ")` 的参数是应该是一个列表而不是一个字符串,可以使用 `split()` 将字符串转换成列表再进行操作。

3. 修改字符串没有实际效果,需要将修改后的字符串赋值给 `str_line`。

以下是修改后的代码:


  1. def TEST_DO_NOT_CHANGE(str_line):
  2.     word_dict = {}
  3.    
  4.     # 去除非字符符号并将单词之间用空格隔开
  5.     str_line = str_line.replace("+", " ").replace(";", " ")
  6.   
  7.     # 统计每个单词出现的次数
  8.     words = str_line.split()
  9.     for word in words:
  10.         if word in word_dict:
  11.             word_dict[word] += 1
  12.         else:
  13.             word_dict[word] = 1
  14.    
  15.     return word_dict  

  16. if __name__ == "__main__":
  17.     str_line = "abc fjf jkl+ abc abc jkl;"
  18.     print(TEST_DO_NOT_CHANGE(str_line))  # 输出 {"abc": 3, "fjf": 1, "jkl": 2}
复制代码


修改后的代码使用了 `replace()` 替换非字符符号,使用了 `split()` 转换成列表,并且将修改后的字符串赋值给了 `str_line`。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-12 17:34:18 | 显示全部楼层
问题出在您在处理字符串时没有正确地去除非字符符号。请参考以下修改后的代码:

  1. def TEST_DO_NOT_CHANGE(str_line):
  2.     word_dict = {}
  3.     ########## 开始作答

  4.     # 使用replace替换非字符符号为空字符
  5.     str_line = str_line.replace(";", "").replace("+", "")
  6.    
  7.     words = str_line.split()
  8.     for word in words:
  9.         if word in word_dict:
  10.             word_dict[word] += 1
  11.         else:
  12.             word_dict[word] = 1

  13.     ########## 结束作答

  14.     return word_dict


  15. if __name__ == "__main__":
  16.     str_line = "abc fjf jkl+ abc abc jkl;"
  17.     print(TEST_DO_NOT_CHANGE(str_line))
复制代码


这里使用了 replace 方法替换输入字符串中的非字符符号。这样处理后的字符串可以正确地统计各单词的词频数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 17:36:23 | 显示全部楼层    本楼为最佳答案   
这段代码中存在几个问题:

1. `str_line.strip(";")` 和 `str_line.strip("+")` 不会修改原字符串,需要将修改后的结果赋值给一个变量。

2. `str_line.join(" ")` 的参数是应该是一个列表而不是一个字符串,可以使用 `split()` 将字符串转换成列表再进行操作。

3. 修改字符串没有实际效果,需要将修改后的字符串赋值给 `str_line`。

以下是修改后的代码:


  1. def TEST_DO_NOT_CHANGE(str_line):
  2.     word_dict = {}
  3.    
  4.     # 去除非字符符号并将单词之间用空格隔开
  5.     str_line = str_line.replace("+", " ").replace(";", " ")
  6.   
  7.     # 统计每个单词出现的次数
  8.     words = str_line.split()
  9.     for word in words:
  10.         if word in word_dict:
  11.             word_dict[word] += 1
  12.         else:
  13.             word_dict[word] = 1
  14.    
  15.     return word_dict  

  16. if __name__ == "__main__":
  17.     str_line = "abc fjf jkl+ abc abc jkl;"
  18.     print(TEST_DO_NOT_CHANGE(str_line))  # 输出 {"abc": 3, "fjf": 1, "jkl": 2}
复制代码


修改后的代码使用了 `replace()` 替换非字符符号,使用了 `split()` 转换成列表,并且将修改后的字符串赋值给了 `str_line`。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 11:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表