Puzzled
Bengt Richter
bokr at oz.net
Tue Jul 12 00:49:37 EDT 2005
On Mon, 11 Jul 2005 22:10:33 -0400, "Colin J. Williams" <cjw at sympatico.ca> wrote:
>The snippet of code below gives the result which follows
>
>for k in ut.keys():
> name= k.split('_')
> print '\n1', name
> if len(name) > 1:
> name[0]= name[0] + name[1].capitalize()
> print '2', name
> name[0]= name[0].capitalize()
> print '3', name
>
>1 ['logical', 'or']
>2 ['logicalOr', 'or']
>3 ['Logicalor', 'or']
>
>I was expecting that 3 would read ['LogicalOr', 'or']
>
>If I replace the above code with:
>
>for k in ut.keys():
> name= k.split('_')
> print '\n1', name
> if len(name) > 1:
> name[0]= name[0].capitalize() + name[1].capitalize()
> print '2', name
> else:
> name[0]= name[0].capitalize()
> print '3', name
>
>I get the desired result.
>
If you walk through the results, you can see what happens to name[2] on output line 2:
>>> 'logicalOr'.capitalize()
'Logicalor'
I.e.,
>>> help(str.capitalize)
Help on method_descriptor:
capitalize(...)
S.capitalize() -> string
Return a copy of the string S with only its first character
capitalized. ^^^^-- meaning all the rest lowercased,
which changed your trailing 'Or'
So, doing .capitalize on all the pieces from split('_') and then joining them:
>>> def doit(w): return ''.join([s.capitalize() for s in w.split('_')])
...
>>> doit('logical_or')
'LogicalOr'
>>> doit('logical')
'Logical'
>>> doit('logical_or_something')
'LogicalOrSomething'
>>> doit('UP_aNd_down')
'UpAndDown'
Regards,
Bengt Richter
More information about the Python-list
mailing list