Larryeric 发表于 2023-4-12 17:32:30

求助

# -*- 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+=1
      else:
            word_dict=1
   
   
   


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

            
if __name__ == "__main__":
    str_line = "abc fjf jkl+ abc abc jkl;"
    print(TEST_DO_NOT_CHANGE(str_line))
请问问题出在哪里了 如何用简单代码修改完成

isdkz 发表于 2023-4-12 17:34:18

问题出在您在处理字符串时没有正确地去除非字符符号。请参考以下修改后的代码:

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

    # 使用replace替换非字符符号为空字符
    str_line = str_line.replace(";", "").replace("+", "")
   
    words = str_line.split()
    for word in words:
      if word in word_dict:
            word_dict += 1
      else:
            word_dict = 1

    ########## 结束作答

    return word_dict


if __name__ == "__main__":
    str_line = "abc fjf jkl+ abc abc jkl;"
    print(TEST_DO_NOT_CHANGE(str_line))

这里使用了 replace 方法替换输入字符串中的非字符符号。这样处理后的字符串可以正确地统计各单词的词频数。

sfqxx 发表于 2023-4-12 17:36:23

这段代码中存在几个问题:

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

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

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

以下是修改后的代码:


def TEST_DO_NOT_CHANGE(str_line):
    word_dict = {}
   
    # 去除非字符符号并将单词之间用空格隔开
    str_line = str_line.replace("+", " ").replace(";", " ")

    # 统计每个单词出现的次数
    words = str_line.split()
    for word in words:
      if word in word_dict:
            word_dict += 1
      else:
            word_dict = 1
   
    return word_dict

if __name__ == "__main__":
    str_line = "abc fjf jkl+ abc abc jkl;"
    print(TEST_DO_NOT_CHANGE(str_line))# 输出 {"abc": 3, "fjf": 1, "jkl": 2}


修改后的代码使用了 `replace()` 替换非字符符号,使用了 `split()` 转换成列表,并且将修改后的字符串赋值给了 `str_line`。
有用请设置最佳答案
页: [1]
查看完整版本: 求助