2011-09-08 22 views
10

Quiero crear una función que compruebe si la primera letra de la cadena está en mayúscula. Esto es lo que he venido para arriba con hasta ahora:Comprobando si la primera letra de la cadena está en mayúscula

def is_lowercase(word): 
    if word[0] in range string.ascii_lowercase: 
     return True 
    else: 
     return False 

cuando intento ejecutarlo me sale este error:

if word[0] in range string.ascii_lowercase 
          ^
SyntaxError: invalid syntax 

Puede alguien echar un vistazo y aconsejarle lo que estoy haciendo mal ?

+0

'range' es una función integrada que devuelve un rango de números, y no tiene ningún lugar en ese código. – geoffspear

+2

evite el patrón 'if [bool]: return True: else return False'. simplemente puede usar 'return [bool]' – wim

Respuesta

30

¿Por qué no utilizar str.isupper();

In [2]: word = 'asdf' 
In [3]: word[0].isupper() 
Out[3]: False 

In [4]: word = 'Asdf' 
In [5]: word[0].isupper() 
Out[5]: True 
+0

Esta es una buena respuesta pero estaba buscando aprender lo que hice mal en el código que escribí en lugar de buscar una solución diferente para el mismo problema. Gracias de todos modos. –

+0

@gameFace Buen punto. A veces, la mejor solución es una solución diferente. ;) – AlG

14

Esta es una función de cadenas:

word = "Hello" 
word.istitle() # True 

pero tenga en cuenta que str.istitle mira si cada palabra de la cadena es el título con carcasa, por lo que este podría darle una sorpresa:

"Hello world".istitle() # returns False! 

Si solo desea comprobar el primer carácter de una cadena use esto:

word = "Hello world" 
word[0].isupper() # True 
+0

@Downvoter: ¿le importa explicar? – orlp

+1

Reacción visceral: en la publicación original, antes de editar, no dejaba en claro que fallaron frases como "Hola mundo" y "Hola". istitle comprueba que cada palabra satisface el formato de , y no estaba claro si se trataba de una restricción otorgada por el OP. Volvió a bajar Votación –

+0

Gracias, he visto esto pero quería crear algo yo mismo en lugar de usar istitle(). –

1

de error La sintaxis se deriva del hecho de que necesita paréntesis:

range(string.ascii_lowercase) 

Pero, de hecho, no se debe usar el rango. Es tan simple como:

if word[0] in string.ascii_lowercase 
+2

La prueba si está en 'ascii_lowercase' podría ocasionar problemas de localización en el futuro; es mejor usar isupper(). Por ejemplo, ¿qué pasa si la palabra está en cirílico? El primer carácter sería mayúscula, pero no estaría en 'ascii_lowercase'. –

+0

'string.ascii_lowercase' no es un número entero, y no es un argumento válido para' range() '. – geoffspear

+0

@Wooble explicando por qué surgió el error de sintaxis en primer lugar. Por lo tanto, escribí "no debería usar el rango" después, para asegurarme de que no abogaba por usar esa solución –

Cuestiones relacionadas