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.

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.


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'

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


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'

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.


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

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


3
import random
def guess_letter():
    return random.choice('abcdefghijklmnopqrstuvwxyz')

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

1

Sie können verwenden

map(lambda a : chr(a),  np.random.randint(low=65, high=90, size=4))

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

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

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


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

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

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


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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.