Tratando de contar palabras en una cadena

Estoy tratando de analizar el contenido de una cadena. Si tiene una puntuación mezclada en la palabra quiero reemplazarlos con espacios.

Por ejemplo, si Johnny.Appleseed! Es: a * good & farmer se ingresa como entrada, debe decir que hay 6 palabras, pero mi código solo lo ve como 0 palabras. No estoy seguro de cómo eliminar un carácter incorrecto.

FYI: Estoy usando python 3, tampoco puedo importar ninguna biblioteca

string = input("type something") stringss = string.split() for c in range(len(stringss)): for d in stringss[c]: if(stringss[c][d].isalnum != True): #something that removes stringss[c][d] total+=1 print("words: "+ str(total)) 

Solución basada en bucle simple:

 strs = "Johnny.Appleseed!is:a*good&farmer" lis = [] for c in strs: if c.isalnum() or c.isspace(): lis.append(c) else: lis.append(' ') new_strs = "".join(lis) print new_strs #print 'Johnny Appleseed is a good farmer' new_strs.split() #prints ['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer'] 

Mejor solución:

Usando regex :

 >>> import re >>> from string import punctuation >>> strs = "Johnny.Appleseed!is:a*good&farmer" >>> r = re.compile(r'[{}]'.format(punctuation)) >>> new_strs = r.sub(' ',strs) >>> len(new_strs.split()) 6 #using `re.split`: >>> strs = "Johnny.Appleseed!is:a*good&farmer" >>> re.split(r'[^0-9A-Za-z]+',strs) ['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer'] 

Aquí hay una solución de una línea que no requiere importar ninguna biblioteca.
Reemplaza los caracteres no alfanuméricos (como la puntuación) con espacios, y luego split la cadena.

Inspirado en ” Cadenas de Python divididas con múltiples separadores ”

 >>> s = 'Johnny.Appleseed!is:a*good&farmer' >>> words = ''.join(c if c.isalnum() else ' ' for c in s).split() >>> words ['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer'] >>> len(words) 6 

prueba esto: analiza la lista de palabras usando re, luego crea un diccionario de palabras: apariencias

 import re word_list = re.findall(r"[\w']+", string) print {word:word_list.count(word) for word in word_list} 
 for ltr in ('!', '.', ...) # insert rest of punctuation stringss = strings.replace(ltr, ' ') return len(stringss.split(' ')) 

Sé que esta es una vieja pregunta pero … ¿Qué tal esto?

 string = "If Johnny.Appleseed!is:a*good&farmer" a = ["*",":",".","!",",","&"," "] new_string = "" for i in string: if i not in a: new_string += i else: new_string = new_string + " " print(len(new_string.split(" "))) 

¿Qué hay de usar Contador de colecciones?

 import re from collections import Counter words = re.findall(r'\w+', string) print (Counter(words)) 
 #Write a python script to count words in a given string. s=str(input("Enter a string: ")) words=s.split() count=0 for word in words: count+=1 print(f"total number of words in the string is : {count}")