Generieren Sie einen zufälligen Buchstaben in Python

146

Gibt es eine Möglichkeit, zufällige Buchstaben in Python zu generieren (wie random.randint, aber für Buchstaben)? Die Bereichsfunktionalität von random.randint wäre nett, aber ein Generator, der nur einen zufälligen Buchstaben ausgibt, wäre besser als nichts.

Kudu
quelle

Antworten:

247

Einfach:

>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> import random
>>> random.choice(string.ascii_letters)
'j'

string.ascii_letters Gibt eine Zeichenfolge zurück, die die Klein- und Großbuchstaben entsprechend dem aktuellen Gebietsschema enthält.

random.choice Gibt ein einzelnes zufälliges Element aus einer Sequenz zurück.

Mark Rushakoff
quelle
12
Es ist eigentlich string.ascii_lowercase oder string.ascii_uppercase.
Taylor Leese
9
Oft brauche ich eine Reihe von Zufälligkeiten, hier ist das (nach from string import ascii_letters, digitsund from random import choice):''.join([choice(ascii_letters + digits) for i in range(32)])
Devin
7
@joaquin string.letters ist in Python 2.7.7 vorhanden.
Wilson Canda
70
>>> import random
>>> import string
>>> random.choice(string.ascii_letters)
'g'
Joaquin
quelle
Dies kann in Klein- oder Großbuchstaben erfolgen. Ich bin mir nicht sicher, ob das nötig ist.
Taylor Leese
3
@TaylorLeese, wie ich bekannt , dass es drei Optionen , einschließlich ascii_letters, ascii_uppercaseund ascii_lowercase.
trdngy
29
>>>def random_char(y):
       return ''.join(random.choice(string.ascii_letters) for x in range(y))

>>>print (random_char(5))
>>>fxkea

um y Anzahl von zufälligen Zeichen zu erzeugen

Saad
quelle
7
auch:''.join(random.sample(string.ascii_lowercase,5))
Dannid
@Dannid nicht ist random.sample()eine Rückkehr einzigartigen Satz von Werten aus dem Eingang, der als nicht das gleiche ist random.choice()?
Droppy
Ja, wenn Sie nur einen Buchstaben auswählen, der keinen Unterschied macht. Außerdem möchten Sie möglicherweise 5 eindeutige Buchstaben - das OP hat nicht angegeben, und beide random.choiceund random.randintgeben einen einzelnen Wert zurück. Sie können auch verwenden numpy.random.choice, um einen eindeutigen Satz zu geben, wenn Sie replace = False hinzufügen, wie numpy.random.choice(string.ascii_lowercase, size=5, replace=False)
folgt
21
>>> import random
>>> import string    
>>> random.choice(string.ascii_lowercase)
'b'
Taylor Leese
quelle
13

Ein anderer Weg der Vollständigkeit halber:

>>> chr(random.randrange(97, 97 + 26))

Verwenden Sie die Tatsache, dass ascii'a' 97 ist und das Alphabet 26 Buchstaben enthält.

Denken Sie bei der Bestimmung der Ober- und Untergrenze des random.randrange()Funktionsaufrufs daran, dass diese random.randrange()ausschließlich an der Obergrenze liegt. Dies bedeutet, dass immer nur eine Ganzzahl generiert wird, die bis zu 1 Einheit unter dem angegebenen Wert liegt.

rlotun
quelle
3
Das hängt davon ab, über welches Alphabet wir sprechen ;-)
Joey
sollte es nicht sein chr(random.randrange(97, 97 + 26 - 1))?
Zhongxiao37
1
@ zhongxiao37 Wirklich, es sollte sein chr(random.randrange(97, 97 + 26). random.randrange()ist an seiner oberen Grenze exklusiv, was bedeutet, dass 97 - 122das übergebene Argument sein muss , um den gesamten Zeichenbereich zu erhalten 123.
Kieran Moynihan
@KieranMoynihan Danke fürs Teilen. Ich habe das noch einmal überprüft und du hast recht. Jetzt sehe ich warum 97 + 26verwendet wird.
Zhongxiao37
6

Sie können dies verwenden, um einen oder mehrere zufällige Buchstaben zu erhalten.

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']
Salhin
quelle
@NigelRen was ist die Verteilung von random.choices?
Jimmy
@SalmanLashkarara help(random.choices)besagt If the relative weights or cumulative weights are not specified, the selections are made with equal probability.Dies würde bedeuten, dass die Verteilung die diskrete gleichmäßige Verteilung ist ( en.wikipedia.org/wiki/Discrete_uniform_distribution ).
Qaswed
5

Sie können einfach eine Liste erstellen:

import random
list1=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
b=random.randint(0,7)
print(list1[b])
Athreya
quelle
4
def randchar(a, b):
    return chr(random.randint(ord(a), ord(b)))
Florian Diesch
quelle
3
import random
def guess_letter():
    return random.choice('abcdefghijklmnopqrstuvwxyz')
Toby
quelle
2
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())
Vaibhav Pthak
quelle
1

Sie können verwenden

map(lambda a : chr(a),  np.random.randint(low=65, high=90, size=4))
Ankit Agrawal
quelle
0
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))

Sie können zufällige Zeichenfolgen wie folgt erhalten:

g9CtUljUWD9wtk1z07iF
ndPbI1DDn6UvHSQoDMtd
klMFY3pTYNVWsNJ6cs34
Qgr7OEalfhXllcFDGh2l
王孝先
quelle
1. Mit Python3 wäre es string.ascii_letters2. Sie können das Listenverständnis speichern, indem Sie keylist = random.choices(base_str(), k=KEY_LEN)3. Warum base_strals Funktion und nicht als base_str = string.ascii_letters+string.digits?
Qaswed
0
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
user9739613
quelle
0

Alle vorherigen Antworten sind korrekt. Wenn Sie nach zufälligen Zeichen verschiedener Typen (z. B. alphanumerische Zeichen und Sonderzeichen) suchen, ist hier ein Skript, das ich erstellt habe, um verschiedene Arten der Erstellung zufälliger Funktionen zu demonstrieren. Es hat drei Funktionen, eine für Zahlen, Alpha- Zeichen und Sonderzeichen. Das Skript generiert einfach Passwörter und ist nur ein Beispiel, um verschiedene Möglichkeiten zum Generieren von zufälligen Zeichen zu demonstrieren.

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))

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

grepit
quelle
-1

Nun, das ist meine Antwort! Es funktioniert gut. Geben Sie einfach die Anzahl der gewünschten zufälligen Buchstaben in 'number' ein ... (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)
David W. Beck
quelle
-1
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)
Jack Honor
quelle
-1

Mein übermäßig komplizierter Code:

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')

Es generiert im Grunde eine Zufallszahl aus 26 und wandelt sie dann in den entsprechenden Buchstaben um. Dies könnte trotzig verbessert werden, aber ich bin nur ein Anfänger und ich bin stolz auf diesen Code.

Nit Nurray
quelle
4
Ihre Antwort muss verbessert werden und ist nicht sehr funktional.
Grepit
1
in Ihrem Fall können Sie einfach tun print(chr(96 + letter)), nein if- elifHölle wird benötigt
Azat Ibrakov
-3

Vielleicht kann Ihnen das helfen:

import random
for a in range(64,90):
    h = random.randint(64, a)
    e += chr(h)
print e
Peter
quelle
Warum iterieren Sie zwischen 64 und 90? Warum nicht einfach von 0 auf 26 gehen und a versetzen? Diese Antwort ist ziemlich schlecht, die Ausgabe kaum zufällig:@AAADCCEHFGJLDJF@EHFMHKWUR
Matt M.
-6

Legen Sie eine Python auf die Tastatur und lassen Sie ihn über die Buchstaben rollen, bis Sie Ihre bevorzugte zufällige Kombination finden. Nur ein Scherz!

import string #This was a design above but failed to print. I remodled it.
import random
irandom = random.choice(string.ascii_letters) 
print irandom
Chirstian Bolovinchi
quelle
2
Willkommen bei Stack Overflow! Dies ist zwar eine gute Antwort, sie ist jedoch identisch mit der bereits veröffentlichten und akzeptierten Antwort von @MarkRushakoff, die vor zwei Jahren beantwortet wurde. Bitte überprüfen Sie die Antworten, bevor Sie sie veröffentlichen, damit wir das Signal-Rausch-Verhältnis niedrig halten können.
Hooked