Puzzled

Discussion in 'Python' started by Colin J. Williams, Jul 12, 2005.

  1. 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.

    Colin W.
     
    Colin J. Williams, Jul 12, 2005
    #1
    1. Advertisements

  2. Colin J. Williams

    Robert Kern Guest

    str.capitalize() changes the first character to be uppercase and all
    later characters to be lower case. It does not leave the later
    characters alone.

    In [1]: str.capitalize?
    Type: method_descriptor
    Base Class: <type 'method_descriptor'>
    String Form: <method 'capitalize' of 'str' objects>
    Namespace: Python builtin
    Docstring:
    S.capitalize() -> string

    Return a copy of the string S with only its first character
    capitalized.

    --
    Robert Kern


    "In the fields of hell where the grass grows high
    Are the graves of dreams allowed to die."
    -- Richard Harter
     
    Robert Kern, Jul 12, 2005
    #2
    1. Advertisements

  3. If you walk through the results, you can see what happens to name[2] on output line 2:
    'Logicalor'

    I.e., 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:
    'UpAndDown'

    Regards,
    Bengt Richter
     
    Bengt Richter, Jul 12, 2005
    #3
  4. Many thanks. I missed the implication that any upper case characters
    after the first are changed to lower case.

    Colin W.
     
    Colin J. Williams, Jul 12, 2005
    #4
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.