[Tutor] 'Name Genereator' Question
Daniel Yoo
dyoo@hkn.eecs.berkeley.edu
Wed, 3 Jan 2001 20:15:17 -0800 (PST)
On Wed, 3 Jan 2001, Curtis Larsen wrote:
> I'm writing a quickie little script that generates names, to better
> understand string manipulation. What I'd like to have is something like
> "map" that can be used against a number of occurrences of a character in
> a string and replace it -- without using a lot of loops.
Here are small things that might improve your program:
The whrandom module has a function called "choice()" which lets you grab
at a random element out of a list. So, instead of:
cons[random.randint(0,21)]
you could use:
whrandom.choice(cons)
which is a bit nicer to read. whrandom.choice() works on strings as well
as lists, so its a nice function.
> The kicker (to me) is how to call "randint" for each character
> replacement target in "name". The easy way would be to "while" loop for
> "'.' in name", etc., or I could create a function to do the replacement
> and call it each time, but I thought there would be a more
> straightforward answer. (I'm probably missing something really, really
> simple here, right??)
Creating a function that does the replacement would be nice. Here's
something:
###
def replaceStuff(str):
# Let's first make str a mutable list.
# The reason for this is because we can modify a
# list "in-place".
templist = list(str)
# Time for the replacement stuff
for i in range(len(templist)):
if templist[i] == '.":
templist[i] = whrandom.choice(vowels)
# skipping consonant stuff
# finally, bring the list back as a string:
return string.join(templist, "")
###
So the loop goes through each character on your list, but you only do
something if that character is a '.' or a ','. I haven't tested the code
above yet, but I hope that it makes sense.