2009-06-20 9 views
1

En essayant de mettre une chaîne en majuscule sur les séparateurs, j'ai rencontré un comportement que je ne comprends pas. Quelqu'un peut-il expliquer pourquoi la chaîne s est revenue pendant la boucle? Merci.Comportement Python de la chaîne dans la boucle

s = 'these-three_words' 
seperators = ('-','_') 
for sep in seperators: 
    s = sep.join([i.capitalize() for i in s.split(sep)]) 
    print s 
print s 

stdout: 
These-Three_words 
These-three_Words 
These-three_Words 

Répondre

6

capitalize tourne le premier caractère majuscule et le reste de la chaîne en minuscules.

Dans la première itération, il ressemble à ceci:

>>> [i.capitalize() for i in s.split('-')] 
['These', 'Three_words'] 

Dans la deuxième itération, les chaînes sont séparées en:

>>> [i for i in s.split('_')] 
['These-Three', 'words'] 

donc en cours d'exécution capitalise sur les deux ensuite tourner le T en trois minuscules.

2

str.capitalize capitalise le premier caractère et met en minuscules les caractères restants.

5

Vous pouvez utiliser title():

>>> s = 'these-three_words' 
>>> print s.title() 
These-Three_Words 
2

Capitaliser() retourne une copie de la chaîne avec que son premier caractère capitalisé. Vous pouvez utiliser ceci:

 
def cap(s): 
    return s[0].upper() + s[1:]