Am I programming in Python mode?
Mordy Ovits
movits at lockstar.com
Wed Feb 2 10:29:38 EST 2000
More information about the Python-list mailing list
Wed Feb 2 10:29:38 EST 2000
- Previous message (by thread): Python & EPIPE: Handling Chg Proposal
- Next message (by thread): Am I programming in Python mode?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Michael Hudson wrote: > > Anders M Eriksson <anders.eriksson at morateknikutveckling.se> writes: > > > Hello! > > > > Being new to Python I would like your comments on this function. Is it > > written in Pytnon mode? > > Only you can tell if it was written in Python mode ('round here Python > mode usually refers to the emacs major mode for Python). I can try and > help with style, which is what I'm fairly sure you meant. > > > The function returns a random string, and have 3 params the lenght of > > the string, lowercase/Uppercase and dublicates > > > > Any comments and/or suggestions are welcome!! > > > > // Anders > > > > > > > > def randStr(n, lower=1, dublicates=1): > > # returns a random string with <n> characters > > # lower if true only lowercase letters > > # dublicates if true then the same letter can be repeated > > This bit could (should) be in a docstring, not a comment. > > > if lower: > > l = ord('a') > > h = ord('z') > > else: > > l = ord('A') > > h = ord('z') > > Hmm, does this actually work? ASCII goes like: > > .... STUVWXYZ[\]^_`abcdefghijk ... > > so the above will get strings containing [\]^_` characters. > > > str = "" > > generator = whrandom.whrandom() > > Why do you want your on generator? > > > for i in range (n): > > ch = generator.randint(l,h) > > if dublicates: > > str = str + chr(ch) > > It's probably better to accumulate substrings into a list and use > string.join to stick them together. This is particularly true in the > single character case, 'cause they're cached. > > > else: > > bRepeat = 1 > > while bRepeat: > > if not chr(ch) in str: > > str = str + chr(ch) > > bRepeat = 0 > > else: > > ch = generator.randint(l,h) > > > > > > return str > > You do know about random.choice don't you? It selects a random item > from a sequnce - and strings are sequences. > > So if I were doing this I'd do it like this: > > import random,string > > def randStr(n,lower=1,duplicates=1): > """ randStr(n:Integer[,lower,duplicates]) -> String > > Generate a random string of length n. > If |lower| is true (the default), only lowercase letters will be used. > If |duplicates| is true (the default), the string may contain duplicates. """ > if lower: > choices = 'abcdefghijklmnopqrstuvwxyz' > else: > choices = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' > result = [] > if not duplicates and n > len(choices): > raise ValueError, "n too large" > for i in range(n): > while 1: > ch = random.choice(choices) > if duplicates or ch not in result: > result.append( ch ) > break > return string.join(result,'') > > This probably isn't perfect, but I hope in helps. > > Cheers, > Michael See string.lowercase, string.uppercase and string.letters As in: for i in range(0, n): string.append(random.choice(string.letters)) Mordy -- o Mordy Ovits o Cryptographic Engineer o LockStar, Inc. -- There are two kinds of fool; One who says "This is old and therefore bad," and one who says "This is new and therefore better." -- John Brunner
- Previous message (by thread): Python & EPIPE: Handling Chg Proposal
- Next message (by thread): Am I programming in Python mode?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list