Sono consapevole .capitalize () mette in maiuscolo la prima lettera di una stringa, ma cosa succede se il primo carattere è un numero intero?
Questo
1bob
5sandy
a questa
1Bob
5Sandy
Sono consapevole .capitalize () mette in maiuscolo la prima lettera di una stringa, ma cosa succede se il primo carattere è un numero intero?
Questo
1bob
5sandy
a questa
1Bob
5Sandy
Risposte:
Se il primo carattere è un numero intero, non capitalizzerà la prima lettera.
>>> '2s'.capitalize()
'2s'
Se si desidera la funzionalità, rimuovere le cifre, è possibile utilizzare '2'.isdigit()
per verificare ogni carattere.
>>> s = '123sa'
>>> for i, c in enumerate(s):
... if not c.isdigit():
... break
...
>>> s[:i] + s[i:].capitalize()
'123Sa'
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
risolve per il caso stringa vuota
. capitalize
trasformerà anche altri caratteri in basso. Dai documenti ufficiali: "Restituisci una versione titolata di S, cioè le parole iniziano con caratteri maiuscoli, tutti i caratteri maiuscoli restanti hanno
Solo perché nessun altro l'ha menzionato:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Tuttavia, questo darebbe anche
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
cioè non si tratta solo di capitalizzare il primo carattere alfabetico. Ma poi .capitalize()
ha lo stesso problema, almeno in quello 'joe Bob'.capitalize() == 'Joe bob'
, quindi meh.
Questo è simile alla risposta di @ Anon in quanto mantiene intatto il resto del caso della stringa, senza la necessità del modulo re.
def sliceindex(x):
i = 0
for c in x:
if c.isalpha():
i = i + 1
return i
i = i + 1
def upperfirst(x):
i = sliceindex(x)
return x[:i].upper() + x[i:]
x = '0thisIsCamelCase'
y = upperfirst(x)
print(y)
# 0ThisIsCamelCase
Come ha sottolineato @Xan, la funzione potrebbe utilizzare un maggiore controllo degli errori (come verificare che x sia una sequenza, tuttavia sto omettendo i casi limite per illustrare la tecnica)
Aggiornato per commento @normanius (grazie!)
Grazie a @GeoStoneMarten nel sottolineare che non ho risposto alla domanda! risolto questo
len(x) == 0
ramo.
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
& title
prima minuscola l'intera stringa e poi maiuscola solo la prima lettera.
a[:1].upper() + a[1:]
, questo si occuperà del len(X)==0
caso d'angolo.