Respuestas:
Sencillo:
>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> import random
>>> random.choice(string.ascii_letters)
'j'
string.ascii_letters devuelve una cadena que contiene las letras minúsculas y mayúsculas según la configuración regional actual.
random.choice devuelve un único elemento aleatorio de una secuencia.
from string import ascii_letters, digitsy from random import choice):''.join([choice(ascii_letters + digits) for i in range(32)])
>>> import random
>>> import string
>>> random.choice(string.ascii_letters)
'g'
ascii_letters, ascii_uppercasey ascii_lowercase.
>>>def random_char(y):
return ''.join(random.choice(string.ascii_letters) for x in range(y))
>>>print (random_char(5))
>>>fxkea
para generar y número de caracteres aleatorios
''.join(random.sample(string.ascii_lowercase,5))
random.sample()devuelve un conjunto único de valores de la entrada, que no es lo mismo que random.choice()?
random.choicey random.randintdevuelven un solo valor. También puede usar numpy.random.choicepara dar un conjunto único si agrega replace = False, así:numpy.random.choice(string.ascii_lowercase, size=5, replace=False)
>>> import random
>>> import string
>>> random.choice(string.ascii_lowercase)
'b'
Otra forma, para completar:
>>> chr(random.randrange(97, 97 + 26))
Use el hecho de que ascii'a' es 97, y hay 26 letras en el alfabeto.
Al determinar el límite superior e inferior de la random.randrange()llamada a la función, recuerde que random.randrange()es exclusivo en su límite superior, lo que significa que solo generará un entero de hasta 1 unidad menos que el valor proporcionado.
chr(random.randrange(97, 97 + 26 - 1))?
chr(random.randrange(97, 97 + 26). random.randrange()es exclusivo en su límite superior, lo que significa que para obtener el rango completo de caracteres 97 - 122, el argumento pasado debe ser 123.
97 + 26se usa.
Puede usar esto para obtener una o más letras aleatorias
import random
import string
random.seed(10)
letters = string.ascii_lowercase
rand_letters = random.choices(letters,k=5) # where k is the number of required rand_letters
print(rand_letters)
['o', 'l', 'p', 'f', 'v']
random.choices?
help(random.choices)afirma If the relative weights or cumulative weights are not specified, the selections are made with equal probability.Esto significaría que la distribución es la distribución uniforme discreta ( en.wikipedia.org/wiki/Discrete_uniform_distribution ).
def randchar(a, b):
return chr(random.randint(ord(a), ord(b)))
import random
def Random_Alpha():
l = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
return l[random.randint(0,25)]
print(Random_Alpha())
Puedes usar
map(lambda a : chr(a), np.random.randint(low=65, high=90, size=4))
import string
import random
KEY_LEN = 20
def base_str():
return (string.letters+string.digits)
def key_gen():
keylist = [random.choice(base_str()) for i in range(KEY_LEN)]
return ("".join(keylist))
Puede obtener cadenas aleatorias como esta:
g9CtUljUWD9wtk1z07iF
ndPbI1DDn6UvHSQoDMtd
klMFY3pTYNVWsNJ6cs34
Qgr7OEalfhXllcFDGh2l
string.ascii_letters2. Puede guardar la comprensión de la lista usando keylist = random.choices(base_str(), k=KEY_LEN)3. ¿Por qué tener base_struna función y no una base_str = string.ascii_letters+string.digits?
def create_key(key_len):
key = ''
valid_characters_list = string.letters + string.digits
for i in range(key_len):
character = choice(valid_characters_list)
key = key + character
return key
def create_key_list(key_num):
keys = []
for i in range(key_num):
key = create_key(key_len)
if key not in keys:
keys.append(key)
return keys
Todas las respuestas anteriores son correctas, si está buscando caracteres aleatorios de varios tipos (es decir, caracteres alfanuméricos y especiales), aquí hay un script que creé para demostrar varios tipos de creación de funciones aleatorias, tiene tres funciones, una para números, alfa- personajes y personajes especiales. El script simplemente genera contraseñas y es solo un ejemplo para demostrar varias formas de generar caracteres aleatorios.
import string
import random
import sys
#make sure it's 3.7 or above
print(sys.version)
def create_str(str_length):
return random.sample(string.ascii_letters, str_length)
def create_num(num_length):
digits = []
for i in range(num_length):
digits.append(str(random.randint(1, 100)))
return digits
def create_special_chars(special_length):
stringSpecial = []
for i in range(special_length):
stringSpecial.append(random.choice('!$%&()*+,-.:;<=>?@[]^_`{|}~'))
return stringSpecial
print("how many characters would you like to use ? (DO NOT USE LESS THAN 8)")
str_cnt = input()
print("how many digits would you like to use ? (DO NOT USE LESS THAN 2)")
num_cnt = input()
print("how many special characters would you like to use ? (DO NOT USE LESS THAN 1)")
s_chars_cnt = input()
password_values = create_str(int(str_cnt)) +create_num(int(num_cnt)) + create_special_chars(int(s_chars_cnt))
#shuffle/mix the values
random.shuffle(password_values)
print("generated password is: ")
print(''.join(password_values))
Resultado:
bueno, esta es mi respuesta! Funciona bien. Simplemente ponga el número de letras al azar que desea en 'número' ... (Python 3)
import random
def key_gen():
keylist = random.choice('abcdefghijklmnopqrstuvwxyz')
return keylist
number = 0
list_item = ''
while number < 20:
number = number + 1
list_item = list_item + key_gen()
print(list_item)
import string
import random
def random_char(y):
return ''.join(random.choice(string.ascii_letters+string.digits+li) for x in range(y))
no=int(input("Enter the number of character for your password= "))
li = random.choice('!@#$%^*&( )_+}{')
print(random_char(no)+li)
Mi código demasiado complicado:
import random
letter = (random.randint(1,26))
if letter == 1:
print ('a')
elif letter == 2:
print ('b')
elif letter == 3:
print ('c')
elif letter == 4:
print ('d')
elif letter == 5:
print ('e')
elif letter == 6:
print ('f')
elif letter == 7:
print ('g')
elif letter == 8:
print ('h')
elif letter == 9:
print ('i')
elif letter == 10:
print ('j')
elif letter == 11:
print ('k')
elif letter == 12:
print ('l')
elif letter == 13:
print ('m')
elif letter == 14:
print ('n')
elif letter == 15:
print ('o')
elif letter == 16:
print ('p')
elif letter == 17:
print ('q')
elif letter == 18:
print ('r')
elif letter == 19:
print ('s')
elif letter == 20:
print ('t')
elif letter == 21:
print ('u')
elif letter == 22:
print ('v')
elif letter == 23:
print ('w')
elif letter == 24:
print ('x')
elif letter == 25:
print ('y')
elif letter == 26:
print ('z')
Básicamente genera un número aleatorio de 26 y luego se convierte en su letra correspondiente. Esto definitivamente podría mejorarse, pero solo soy un principiante y estoy orgulloso de este código.
print(chr(96 + letter)), no if- elifse necesita el infierno
Tal vez esto pueda ayudarle:
import random
for a in range(64,90):
h = random.randint(64, a)
e += chr(h)
print e
@AAADCCEHFGJLDJF@EHFMHKWUR
Coloque una pitón en el teclado y deje que pase sobre las letras hasta que encuentre su combo aleatorio preferido ¡Es broma!
import string #This was a design above but failed to print. I remodled it.
import random
irandom = random.choice(string.ascii_letters)
print irandom