Estoy teniendo dificultades con la función isspace. ¿Alguna idea de por qué mi código está mal y cómo solucionarlo?

Aquí está el problema: Implemente la función get_num_of_non_WS_characters (). get_num_of_non_WS_characters () tiene un parámetro de cadena y devuelve el número de caracteres en la cadena, excluyendo todos los espacios en blanco.

Aquí está mi código:

def get_num_of_non_WS_characters(s):

    count = 0
    for char in s: 
        if char.isspace():
            count = count + 1  
        return count
0
jr17420975320 31 oct. 2017 a las 22:15

4 respuestas

La mejor respuesta

Desea espacios en blanco no , por lo que debe usar not

def get_num_of_non_WS_characters(s):
    count = 0
    for char in s:
        if not char.isspace():
            count += 1
    return count

>>> get_num_of_non_WS_characters('hello')
5
>>> get_num_of_non_WS_characters('hello  ')
5

Para completar, esto podría hacerse de manera más sucinta utilizando una expresión generadora

def get_num_of_non_WS_characters(s):
    return sum(1 for char in s if not char.isspace())
4
CoryKramer 31 oct. 2017 a las 19:17

Simplemente usaría n = s.replace ("", "") y luego len (n). De lo contrario, creo que debería aumentar el recuento después de la declaración if y poner un continuar dentro de ella.

0
Andris Jansons 31 oct. 2017 a las 19:22

Una versión más corta de la respuesta @CoryKramer:

def get_num_of_non_WS_characters(s):
    return sum(not c.isspace() for c in s)
1
AGN Gazer 31 oct. 2017 a las 19:22

Como alternativa, también puedes hacer:

def get_num_of_non_WS_characters(s):
    return len(''.join(s.split()))

Entonces

s = 'i am a string'
get_num_of_non_WS_characters(s)

Devolverá 10

Esto también eliminará pestañas y nuevos caracteres de línea:

s = 'i am a string\nwith line break'
''.join(s.split())

Dará

'iamastringwithlinebreak'
1
Cleb 31 oct. 2017 a las 19:40