Cómo contar dígitos, letras, espacios para una cadena en Python

Estoy tratando de hacer una función para detectar cuántos dígitos, letras, espacios y otros forman una cadena. ¿Sabes lo que está mal con mi código? ¿Puedo mejorar mi código para que sea más simple y preciso?

¡Gracias! (aquí está el código revisado)

def count(x): length = len(x) digit = 0 letters = 0 space = 0 other = 0 for i in x: if x[i].isalpha(): letters += 1 elif x[i].isnumeric(): digit += 1 elif x[i].isspace(): space += 1 else: other += 1 return number,word,space,other 

mostró este error:

 >>> count(asdfkasdflasdfl222) Traceback (most recent call last): File "", line 1, in  count(asdfkasdflasdfl222) NameError: name 'asdfkasdflasdfl222' is not defined 

Aquí hay otra opción:

 s = 'some string' numbers = sum(c.isdigit() for c in s) words = sum(c.isalpha() for c in s) spaces = sum(c.isspace() for c in s) others = len(s) - numbers - words - spaces 

No deberías estar configurando x = [] . Eso es establecer una lista vacía a su parámetro ingresado. Además, use la syntax de python’s for i in x siguiente manera:

 for i in x: if i.isalpha(): letters+=1 elif i.isnumeric(): digit+=1 elif i.isspace(): space+=1 else: other+=1 

Hay 2 errores en este código:

1) Debes eliminar esta línea, ya que volverá a escribir x en una lista vacía:

 x = [] 

2) En la primera statement “if”, debes sangrar la statement “letter + = 1”, como:

 if x[i].isalpha(): letters += 1 

Al ignorar cualquier otra cosa que pueda o no ser correcta con su “código revisado”, el problema que causa el error actualmente citado en su pregunta se debe a que llama a la función “contar” con una variable no definida porque no citó la cadena.

  • count(thisisastring222) busca una variable llamada thisisastring222 para pasar a la función llamada count. Para que esto funcione, tendría que haber definido la variable antes (por ejemplo, con thisisastring222 = "AStringWith1NumberInIt." ), Entonces su función hará lo que quiera con el contenido del valor almacenado en la variable, no el nombre de la variable.
  • count("thisisastring222") codifica la cadena “thisisastring222” en la llamada, lo que significa que la función de conteo funcionará con la cadena exacta que se le haya pasado.

Para arreglar su llamada a su función, simplemente agregue citas en torno a asdfkasdflasdfl222 cambiando el count(asdfkasdflasdfl222) para count("asdfkasdflasdfl222") .

En cuanto a la pregunta real “Cómo contar dígitos, letras, espacios para una cadena en Python”, de un vistazo, el rest del “código revisado” se ve bien, excepto que la línea de retorno no devuelve las mismas variables que ha usado en el rest del código. Para corregirlo sin cambiar nada más en el código, cambie el number y la word a digit y las letters , haciendo que el return number,word,space,other return digit,letters,space,other convierta en el return digit,letters,space,other , o mejor aún el return (digit, letters, space, other) para que coincida con el comportamiento actual al mismo tiempo que usa un mejor estilo de encoding y es explícito sobre qué tipo de valor se devuelve (en este caso, una tupla).

 sample = ("Python 3.2 is very easy") #sample string letters = 0 # initiating the count of letters to 0 numeric = 0 # initiating the count of numbers to 0 for i in sample: if i.isdigit(): numeric +=1 elif i.isalpha(): letters +=1 else: pass letters numeric 

ENTRADA:

1

26

sadw96aeafae4awdw2 wd100awd

 import re a=int(input()) for i in range(a): b=int(input()) c=input() w=re.findall(r'\d',c) x=re.findall(r'\d+',c) y=re.findall(r'\s+',c) z=re.findall(r'.',c) print(len(x)) print(len(y)) print(len(z)-len(y)-len(w)) 

SALIDA:

4

1

19

Los cuatro dígitos son 96, 4, 2, 100 El número de espacios = 1 número de letras = 19