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.
8 2666
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: 
>>> ''.join([chr([random.randrange(48,58),random.randrange(65,91)][random.randint(0,1)]) for x in xrange(17)])

'3E4F8F756F584Z8XU'

Or in noncomprehension form: 
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'

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
>>>
bvdet 2,851
Expert Mod 2GB
Now that we have some code in this thread, I guess I'll post mine :)  >>> import random

>>> import string

>>> characters = string.letters+string.digits

>>> no_chrs = 17

>>> print ''.join([random.choice(characters) for _ in range(no_chrs)])

uGAGd5Er82VOFsjwh

>>>
thanks guys for the help.
[quote=jlm699]How about this list comprehension: 
>>> ''.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 09[48,58] and AZ[6591], 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.
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: 
>>> ['a', 'b'][0]

'a'

>>> ['a', 'b'][1]

'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 
>>> 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 adhoc 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.
bvdet 2,851
Expert Mod 2GB
How about this list comprehension: 
>>> ''.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 09[48,58] and AZ[6591], 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: 
>>> (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
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: 
>>> ['a', 'b'][0]

'a'

>>> ['a', 'b'][1]

'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 
>>> 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 adhoc 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.
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
          