我想要计算字数并列出字数计算的次数。但是
f = open("Les.Miserable.txt", 'r')
words = f.read().split()
words.sort()
wordCount = ()
for i in range(len(words)):
words[i] = words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")
words[i] = words[i].upper()
if words[i] not in wordCount:
wordCount[words[i]] = 1
else:
wordCount[words[i]] += 1
我可以看到错误消息'tuple'对象在
中没有属性'upper'words[i] = words[i].upper()
这里
并且错误消息'tuple'对象不支持
中的项目分配wordCountint [words [i]] = 1
请让我知道问题是什么
答案 0 :(得分:1)
如果您在尝试更换字符后打印words[i]
的值,则会看到它设置为tuple
,例如
('word', (',', ''), ('/', ''), ('?', ''), ('!', ''))
因此,试图删除不需要的标点符号的行实际上会创建一个元组,因为这是逗号分隔的项目,即
words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")
实际上是由words[i].replace(".", "")
后跟(",", "")
等组成的元组。
您可能想要将大量替换操作链接在一起,但这需要看起来像这样:
words[i].replace(".", "").replace(",", "").replace("/", "").replace("?", "").replace("!", "")
但这非常难看,而且仅限于几个标点符号。 str.translate()
更好:
words[i] = words[i].translate(None, '.,/?!')
或者,如果您想摆脱所有标点符号,可以使用string.punctuation
:
import string
words[i] = words[i].translate(None, string.punctuation)
或者,如果您使用的是Python 3:
import string
words[i] = words[i].({ord(c):None for c in string.punctuation})
您的代码中还有其他问题,但请查看您是否可以先解决第一个问题。
答案 1 :(得分:0)
在这一行:
words[i] = words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")
您将元组分配到words[i]
。
我想你想要替换几个角色并且你想要这样做:
words[i] = words[i].replace(".", "").replace(",", "").replace("/", "").replace("?", "").replace("!", "")
它们之间用逗号表示的几个值是元组。
1,5,6
与(1,5,6)
相同
所以
words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")
与。相同
(words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", ""))
另外,你不能分配到元组中。这条线
wordCount[words[i]] = 1
可以抛出异常,你需要将wordCountint
更改为dict(当你创建它时):
wordCount = {}
答案 2 :(得分:0)
words[i] = words[i].replace(".", ""), (",", ""), ("/", ""), ("?", ""), ("!", "")
上面的代码使words
成为一个元组。并且您无法在元组上执行upper()
之类的操作。因此,错误。
我想,你想做的是
words[i] = words[i].replace(".", "").replace(",", "").replace("/", "").replace("?", "").replace("!", "")
此外,您已将wordCount = ()
声明为元组。由于这个原因,您将无法编辑wordCount
,这将导致错误。它应该是字典:wordCount = {}
整个程序应如下所示:
f = open("Les.Miserable.txt", 'r')
words = f.read().split()
words.sort()
wordCount = {}
for i in range(len(words)):
words[i] = words[i].replace(".", "").replace(",", "").replace("/", "").replace("?", "").replace("!", "")
words[i] = words[i].upper()
if words[i] not in wordCount:
wordCount[words[i]] = 1
else:
wordCount[words[i]] += 1
sorted_wordCount = sorted(wordCount.items(), key=operator.itemgetter(1), reverse=True)
print sorted_wordCount