469,323 Members | 1,460 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,323 developers. It's quick & easy.

Random numbers and alphabet mixture

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 2666
jlm699
314 100+
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
  1. >>> ''.join([chr([random.randrange(48,58),random.randrange(65,91)][random.randint(0,1)]) for x in xrange(17)])
  2. '3E4F8F756F584Z8XU'
  3.  
Or in non-comprehension form:
Expand|Select|Wrap|Line Numbers
  1. import random
  2.  
  3. rstring = ''
  4. for x in xrange(17):
  5.     rint = random.randint(0,1)
  6.     if rint:
  7.         rstring += chr(random.randrange(48,58))
  8.     else:
  9.         rstring += chr(random.randrange(65,91))
  10.  
  11. >>> rstring
  12. 'T374TX07KEP031F17'
  13.  
Mar 24 '08 #2
bvdet
2,851 Expert Mod 2GB
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
bvdet
2,851 Expert Mod 2GB
Now that we have some code in this thread, I guess I'll post mine :)
Expand|Select|Wrap|Line Numbers
  1. >>> import random
  2. >>> import string
  3. >>> characters = string.letters+string.digits
  4. >>> no_chrs = 17
  5. >>> print ''.join([random.choice(characters) for _ in range(no_chrs)])
  6. uGAGd5Er82VOFsjwh
  7. >>> 
Mar 24 '08 #4
thanks guys for the help.
Mar 24 '08 #5
[quote=jlm699]How about this list comprehension:
Expand|Select|Wrap|Line Numbers
  1. >>> ''.join([chr([random.randrange(48,58),random.randrange(65,91)][random.randint(0,1)]) for x in xrange(17)])
  2. '3E4F8F756F584Z8XU'
  3.  
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
jlm699
314 100+
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[0]) is 'a' and element 1 (tst[1]) 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
  1. >>> ['a', 'b'][0]
  2. 'a'
  3. >>> ['a', 'b'][1]
  4. 'b'
  5.  
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
  1. >>> import random
  2. >>> ['a', 'b'][random.randint(0,1)]
  3. 'b'
  4. >>> ['a', 'b'][random.randint(0,1)]
  5. 'a'
  6. >>> 
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
bvdet
2,851 Expert Mod 2GB
How about this list comprehension:
Expand|Select|Wrap|Line Numbers
  1. >>> ''.join([chr([random.randrange(48,58),random.randrange(65,91)][random.randint(0,1)]) for x in xrange(17)])
  2. '3E4F8F756F584Z8XU'
  3.  
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
  1. >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91)))
  2. ('6', 'O')
  3. >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91)))
  4. ('8', 'Y')
  5. >>> random.randint(0,1)
  6.  
  7. >>> random.randint(0,1)
  8. 1
  9. >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91)))[random.randint(0,1)]
  10. 'T'
  11. >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91)))[random.randint(0,1)]
  12. 'R'
  13. >>> (chr(random.randrange(48,58)),chr(random.randrange(65,91)))[random.randint(0,1)]
  14. '3'
  15. >>> 
#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
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[0]) is 'a' and element 1 (tst[1]) 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
  1. >>> ['a', 'b'][0]
  2. 'a'
  3. >>> ['a', 'b'][1]
  4. 'b'
  5.  
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
  1. >>> import random
  2. >>> ['a', 'b'][random.randint(0,1)]
  3. 'b'
  4. >>> ['a', 'b'][random.randint(0,1)]
  5. 'a'
  6. >>> 
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

Post your reply

Sign in to post your reply or Sign up for a free account.

Similar topics

16 posts views Thread by Krakatioison | last post: by
10 posts views Thread by Nicholas Geraldi | last post: by
21 posts views Thread by Marc Dansereau | last post: by
104 posts views Thread by fieldfallow | last post: by
12 posts views Thread by Jim Michaels | last post: by
11 posts views Thread by Olaf \El Blanco\ | last post: by
13 posts views Thread by Peter Oliphant | last post: by
24 posts views Thread by pereges | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
reply views Thread by mdpf | last post: by
reply views Thread by harlem98 | last post: by
reply views Thread by listenups61195 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.