[Tutor] Better structure?
Orri Ganel
singingxduck at gmail.com
Thu Feb 3 05:28:04 CET 2005
Orri Ganel wrote:
> Kent Johnson wrote:
>
>> Jacob S. wrote:
>>
>>>> Try writing the code to do what lstrip actually does
>>>> - its much harder. So the library includes the more
>>>> difficult function and lets you code the easy ones.
>>>
>>>
>>>
>>>
>>> def lstrip(string,chars=' ')
>>> string = list(string)
>>> t = 0
>>> for x in string:
>>> if x in chars:
>>> string.remove(t)
>>> else:
>>> break
>>> t = t+1
>>>
>>>
>>> Okay, so it's not that difficult,
>>
>>
>>
>> Well, after fixing the obvious syntax error I tried
>> print lstrip('abcd', 'abcd')
>>
>> and got
>> Traceback (most recent call last):
>> File "D:\Personal\Tutor\LStrip.py", line 11, in ?
>> print lstrip('abcd', 'abcd')
>> File "D:\Personal\Tutor\LStrip.py", line 6, in lstrip
>> string.remove(t)
>> ValueError: list.remove(x): x not in list
>>
>> so maybe it's not that easy either. Don't forget the unit tests! :-)
>>
>> Kent
>>
>> _______________________________________________
>> Tutor maillist - Tutor at python.org
>> http://mail.python.org/mailman/listinfo/tutor
>>
> Actually, its not all that difficult. Instead of removing characters
> from the list, just replace them with an empty string and return
> ''.join(string):
>
> >>> def lstrip(string,chars=' '):
> string = list(string)
> i = 0
> for x in string:
> if x in chars:
> string[i] = ''
> else:
> break
> i+=1
> return ''.join(string)
>
> >>> lstrip('abcd','abcd')
> ''
> >>> 'abcd'.lstrip('abcd')
> ''
> >>> 'go on long log buddy'.lstrip('gonl ')
> 'buddy'
> >>> lstrip('go on long log buddy', 'gonl ')
> 'buddy'
> >>> 'go on long log buddy'.lstrip('gonl')
> ' on long log buddy'
> >>> lstrip('go on long log buddy', 'gonl')
> ' on long log buddy'
>
> So its not a brute force thing so much as a change in how you look at
> it that makes it difficult.
>
By the same token, to do rstrip just [::-1] - ify string when you make
it into a list and when you join it to be returned:
>>> def rstrip(string,chars=' '):
string = list(string)[::-1]
i = 0
for x in string:
if x in chars:
string[i] = ''
else:
break
i+=1
return ''.join(string)[::-1]
>>> 'abcde'.rstrip('cde')
'ab'
>>> 'abcde'.rstrip('ecd')
'ab'
>>> rstrip('abcde','cde')
'ab'
>>> rstrip('abcde','ecd')
'ab'
--
Email: singingxduck AT gmail DOT com
AIM: singingxduck
Programming Python for the fun of it.
More information about the Tutor
mailing list