for this program I'm trying to ask the user enter as much text as he/she wants in a file and have the program count the Total number of words that was stored in that file. For instance, if I type "Hi I like to eat blueberry pie" the program should read a total of 7 words. The program runs fine until I type in Option 6, where it counts the number of words. I always get this error: 'str' object has no attribute 'items'
#Prompt the user to enter a block of text.
done = False
textInput = ""
while(done == False):
nextInput= input()
if nextInput== "EOF":
break
else:
textInput += nextInput
#Prompt the user to select an option from the Text Analyzer Menu.
print("Welcome to the Text Analyzer Menu! Select an option by typing a number"
"\n1. shortest word"
"\n2. longest word"
"\n3. most common word"
"\n4. left-column secret message!"
"\n5. fifth-words secret message!"
"\n6. word count"
"\n7. quit")
#Set option to 0.
option = 0
#Use the 'while' to keep looping until the user types in Option 7.
while option !=7:
option = int(input())
#I get the error in this section of the code.
#If the user selects Option 6, print out the total number of words in the
#text.
elif option == 6:
count = {}
for i in textInput:
if i in count:
count[i] += 1
else:
count[i] = 1
#The error lies in the for loop below.
for word, times in textInput.items():
print(word , times)
The issue here is that textInput
is a string, so it doesn't have the items()
method.
If you only want the number of words, you can try using len:
print len(textInput.split(' '))
If you want each word, and their respective occurrences, you need to use count
instead of textInput
:
count = {}
for i in textInput.split(' '):
if i in count:
count[i] += 1
else:
count[i] = 1
for word, times in count.items():
print(word , times)
要计算单词总数(包括重复次数),可以使用此单行代码,其中file_path是文件的绝对路径:
sum(len(line.split()) for line in open(file_path))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.