2011-09-08 22 views
10

Voglio creare una funzione che dovrebbe verificare se la prima lettera di stringa è in maiuscolo. Questo è quello che ho venuto in mente finora:Verifica se la prima lettera di stringa è in maiuscolo

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

quando provo a farlo funzionare ottengo questo errore:

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

Qualcuno può avere uno sguardo e consigliare quello che sto facendo male ?

+0

'range' è una funzione incorporata che restituisce un intervallo di numeri e non ha alcun posto in quel codice. – geoffspear

+2

evitare il modello 'if [bool]: restituisce True: else restituisce False'. puoi semplicemente usare 'return [bool]' – wim

risposta

30

Perché non utilizzare 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

Questa è una buona risposta, ma stavo cercando di capire cosa ho sbagliato nel codice che ho scritto piuttosto che cercare una soluzione diversa allo stesso problema. Grazie lo stesso. –

+0

@gameFace Buon punto. A volte la soluzione migliore è una soluzione diversa. ;) – AlG

14

Questo è built-in per le stringhe:

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

ma nota che str.istitle guarda se ogni parola nella stringa è il titolo-carter, quindi questo potrebbe darvi una sorpresa:

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

Se si desidera controllare il primissimo carattere di una stringa, utilizzare questo:

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

@Downvoter: cura di spiegare? – orlp

+1

Reazione viscerale: nel post originale, prima di essere modificato, non hai chiarito che frasi come "Hello world" e "HELlo" falliscono. istitle verifica che ogni parola soddisfi il formato di e non è chiaro se si trattasse di una restrizione fornita dall'OP. Revolverato in arretrato –

+0

Grazie, ho visto questo ma ho voluto creare qualcosa io stesso piuttosto che usare istitle(). –

1

errore La sintassi deriva dal fatto che avete bisogno di parentesi:

range(string.ascii_lowercase) 

Ma in realtà non si dovrebbe usare gamma. È semplice come:

if word[0] in string.ascii_lowercase 
+2

Provare se è in "ascii_lowercase' potrebbe portare a problemi di localizzazione lungo la strada - meglio usare isupper(). Ad esempio, cosa succede se la parola è in cirillico? Il primo carattere sarebbe in maiuscolo, ma non sarebbe in 'ascii_lowercase'. –

+0

'string.ascii_lowercase' non è un numero intero e non è un argomento valido per' range() '. – geoffspear

+0

@Wooble spiegando perché l'errore di sintassi è sorto in primo luogo. Quindi ho scritto "non dovresti usare l'intervallo" in seguito, per assicurarmi che non stavo sostenendo di usare quella soluzione –

Problemi correlati