I'm probably having a bit of an off-day, so please forgive me if this is a really silly question (even for a beginner in Python)!
I'm working through the exercises for Chapter 6 of Wesley Chun's book [incidentally, I tried to append another endorsement to the list, but my use of Python rather than "+1" may have looked like a typo or the work of a lunatic, or perhaps my post is just late in appearing - anyway, another happy reader here!], and running again into a difficulty which I "cheated" my way through earlier. On the earlier occasion: "6-6 Strings. Create the equivalent of string.strip(): Take a string and remove all leading and trailing whitespace. (Use of string.*strip() defeats the purpose of this exercise.)" I wrote: from string import whitespace def lstrip(s): if s: for i, c in enumerate(s): if c not in whitespace: break return s[i:] else: return s def rstrip(s): return lstrip(s[::-1])[::-1] # Note: far from maximally efficient (two unnecessary copies!) def strip(s): return lstrip(rstrip(s)) On the present occasion: "6-12 Strings. ... (b) Create another function called rfindchr() that will find the last occurrence of a character in a string. Naturally this works similarly to findchr(), but it starts its search from the end of the input string. ..." I thought I had better err in the opposite direction, so I wrote: def findchr(strng, ch): for i, c in enumerate(strng): if c == ch: return i return -1 def rfindchr(strng, ch): # Surely there's a neater (but still efficient) way? n = len(strng) for i in range(n - 1, -1, -1): if strng[i] == ch: return i return -1 def subchr(strng, origchar, newchar): chars = list(strng) for i, c in enumerate(chars): if c == origchar: chars[i] = newchar return ''.join(chars) I've quoted all my code, in case it's all bad, but it's rfindchr() that I'm particularly worried about. -- Angus Rodgers _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor