I am new to python and I am trying to create a capitalize function that either capitalizes all words in a string or only the first word. Here is my function
def capitalize(data, applyToAll=False):
"""depending on applyToAll it either capitalizes
all the words in the string or the first word of a string"""
if(type(data).__name__ == "str"):
wordList = data.split()
if(applyToAll == True):
for word in wordList:
wordList[word] = word.capitalize() #here I am stuck!
return " ".join(wordList)
else: return data.capitalize()
else: return data
So basically, I want to edit the item but I don't know how I can do it.
Btw, this is an optional question: in c# I had the chance to debug my code, what do yo guys use in python to debug?
Use a list comprehension:
def capitalize(s, applyToAll=False):
if applyToAll:
l = [w.capitalize() for w in s.split()]
return " ".join(l)
else:
return s.capitalize()
what do yo guys use in python to debug?
print
statements for complicated pieces of code, the interactive interpreter for anything else. I write a lot of tests through, and run them with nose.
The bread-and-butter way to do this is to use a list comprehension:
>>> l = ['one', 'two', 'three']
>>> [w.capitalize() for w in l]
['One', 'Two', 'Three']
This creates a copy of the list, with the expression applied to each of the items.
If you don't want to create a copy, you could do this...
>>> for i, w in enumerate(l):
... l[i] = w.capitalize()
...
>>> l
['One', 'Two', 'Three']
...or this:
l[:] = (w.capitalize() for w in l)
The latter is probably the most elegant way to alter the list in-place, but note that it uses more temporary storage then the enumerate
method.