444,199 Members | 1,120 Online Need help? Post your question and get tips & solutions from a community of 444,199 IT Pros & Developers. It's quick & easy.

# Random numbers and alphabet mixture

 P: 17 Hi, I am a noob and I was wondering if there is way to generate random mixture of alphabets and numbers? For example: 1234567890ABCDEFG or 4BA92ABD293BC3890 the length needs to be 17 characters long. Mar 24 '08 #1
8 Replies

 100+ P: 314 Hi, I am a noob and I was wondering if there is way to generate random mixture of alphabets and numbers? For example: 1234567890ABCDEFG or 4BA92ABD293BC3890 the length needs to be 17 characters long. How about this list comprehension: Expand|Select|Wrap|Line Numbers >>> ''.join([chr([random.randrange(48,58),random.randrange(65,91)][random.randint(0,1)]) for x in xrange(17)]) '3E4F8F756F584Z8XU'   Or in non-comprehension form: Expand|Select|Wrap|Line Numbers import random   rstring = '' for x in xrange(17):     rint = random.randint(0,1)     if rint:         rstring += chr(random.randrange(48,58))     else:         rstring += chr(random.randrange(65,91))   >>> rstring 'T374TX07KEP031F17'   Mar 24 '08 #2

 Expert Mod 2.5K+ P: 2,851 Hi, I am a noob and I was wondering if there is way to generate random mixture of alphabets and numbers? For example: 1234567890ABCDEFG or 4BA92ABD293BC3890 the length needs to be 17 characters long. That is easily done with the random.choice() function, a list or string of character choices, and a list comprehension or for loop. Select a character from the choices 17 times, and join or concatenate the characters. Try coding yourself and post back. Example output from a variable characters, 10 random strings: >>> characters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ0123456789' >>> j5jSeP4etag0EucN0 BAlxpfUfXnEjBNaL6 dB0GSaCFZMRg2DrqK uMLz8ivN3cm8k8MCC b6qHuPAf7ATYsLIjd cfYmLEfGa66nKZzlJ ldQd3ouLNSG7ghSu3 vxFn9UHchY8nRe2Mj QfbuEMtfjRZJuxALZ 18TcORlqnZGrOUUrm >>> Mar 24 '08 #3

 Expert Mod 2.5K+ P: 2,851 Now that we have some code in this thread, I guess I'll post mine :) Expand|Select|Wrap|Line Numbers >>> import random >>> import string >>> characters = string.letters+string.digits >>> no_chrs = 17 >>> print ''.join([random.choice(characters) for _ in range(no_chrs)]) uGAGd5Er82VOFsjwh >>>  Mar 24 '08 #4

 P: 17 thanks guys for the help. Mar 24 '08 #5

 P: 17 [quote=jlm699]How about this list comprehension: Expand|Select|Wrap|Line Numbers >>> ''.join([chr([random.randrange(48,58),random.randrange(65,91)][random.randint(0,1)]) for x in xrange(17)]) '3E4F8F756F584Z8XU'   I am trying to understand this. So, you have a chr range of 0-9[48,58] and A-Z[65-91], but what is random.randint(0,1) is that step by one? I don't understand this. I like how this is written, but hopefully someone can explain. Mar 24 '08 #6

 100+ P: 314 what is random.randint(0,1) is that step by one? I don't understand this. No that is an obfuscated way to randomly choose between one of two choices. Let's say you have a list tst = ['a', 'b'] Element 0 (tst) is 'a' and element 1 (tst) is 'b'. So let's say instead of storing the list to a variable tst you simply use the list itself: Expand|Select|Wrap|Line Numbers >>> ['a', 'b'] 'a' >>> ['a', 'b'] 'b'   Now if we put random.randint(0,1) in place of the index specifier, we have a randomly chosen element from the list picked Expand|Select|Wrap|Line Numbers >>> import random >>> ['a', 'b'][random.randint(0,1)] 'b' >>> ['a', 'b'][random.randint(0,1)] 'a' >>>  So in my code example I have the random letter and the random number pickers contained in a ad-hoc list [random_letter, random_number] and an element is chosen based on the result of randint(0,1). Does that clear it up a little bit? Unfortunately, this is not the best practice in terms of computing efficiency as a random letter and two random numbers are generated on each iteration (actually three random numbers), whereas bvdet's solution only requires one random number (index of list) to be generated. Mar 24 '08 #7

 Expert Mod 2.5K+ P: 2,851 How about this list comprehension: Expand|Select|Wrap|Line Numbers >>> ''.join([chr([random.randrange(48,58),random.randrange(65,91)][random.randint(0,1)]) for x in xrange(17)]) '3E4F8F756F584Z8XU'   I am trying to understand this. So, you have a chr range of 0-9[48,58] and A-Z[65-91], but what is random.randint(0,1) is that step by one? I don't understand this. I like how this is written, but hopefully someone can explain. Breaking it up into two parts: Expand|Select|Wrap|Line Numbers >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91))) ('6', 'O') >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91))) ('8', 'Y') >>> random.randint(0,1)   >>> random.randint(0,1) 1 >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91)))[random.randint(0,1)] 'T' >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91)))[random.randint(0,1)] 'R' >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91)))[random.randint(0,1)] '3' >>>  #1 - Create a tuple containing a letter and a number #2 - Take a slice of the tuple (using random.randint(0,1)) to produce a random letter or number Mar 24 '08 #8

 P: 17 Thanks that helps. Makes sense now. No that is an obfuscated way to randomly choose between one of two choices. Let's say you have a list tst = ['a', 'b'] Element 0 (tst) is 'a' and element 1 (tst) is 'b'. So let's say instead of storing the list to a variable tst you simply use the list itself: Expand|Select|Wrap|Line Numbers >>> ['a', 'b'] 'a' >>> ['a', 'b'] 'b'   Now if we put random.randint(0,1) in place of the index specifier, we have a randomly chosen element from the list picked Expand|Select|Wrap|Line Numbers >>> import random >>> ['a', 'b'][random.randint(0,1)] 'b' >>> ['a', 'b'][random.randint(0,1)] 'a' >>>  So in my code example I have the random letter and the random number pickers contained in a ad-hoc list [random_letter, random_number] and an element is chosen based on the result of randint(0,1). Does that clear it up a little bit? Unfortunately, this is not the best practice in terms of computing efficiency as a random letter and two random numbers are generated on each iteration (actually three random numbers), whereas bvdet's solution only requires one random number (index of list) to be generated. Mar 24 '08 #9 