Hasilkan huruf acak dengan Python

147

Apakah ada cara untuk menghasilkan huruf acak dengan Python (seperti random.randint tetapi untuk huruf)? Rentang fungsionalitas random.randint akan lebih baik tetapi memiliki generator yang hanya mengeluarkan huruf acak akan lebih baik daripada tidak sama sekali.

Kudu
sumber

Jawaban:

247

Sederhana:

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

string.ascii_letters mengembalikan string yang berisi huruf kecil dan huruf besar sesuai dengan lokal saat ini.

random.choice mengembalikan elemen acak tunggal dari suatu urutan.

Mark Rushakoff
sumber
12
Ini sebenarnya string.ascii_lowercase atau string.ascii_uppercase.
Taylor Leese
9
Seringkali, saya membutuhkan serangkaian tebusan, inilah yang (setelah from string import ascii_letters, digitsdan from random import choice):''.join([choice(ascii_letters + digits) for i in range(32)])
Devin
7
@ joaquin string.letters hadir dalam python 2.7.7.
Wilson Canda
70
>>> import random
>>> import string
>>> random.choice(string.ascii_letters)
'g'
joaquin
sumber
Ini bisa lebih rendah atau huruf besar. Tidak yakin apakah itu yang dibutuhkan.
Taylor Leese
3
@TaylorLeese, karena saya tahu bahwa ada tiga pilihan, termasuk ascii_letters, ascii_uppercase, dan 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

untuk menghasilkan sejumlah karakter acak

Saad
sumber
7
juga:''.join(random.sample(string.ascii_lowercase,5))
Dannid
@Dannid Tidak random.sample()mengembalikan seperangkat nilai unik dari input, yang tidak sama dengan random.choice()?
Droppy
Ya, meskipun jika Anda memilih hanya satu huruf yang tidak membuat perbedaan Selain itu, Anda mungkin ingin 5 huruf unik - OP tidak menentukan, dan keduanya random.choicedan random.randintmengembalikan nilai tunggal. Anda juga dapat menggunakan numpy.random.choiceuntuk memberikan set unik jika Anda menambahkan ganti = Salah, seperti:numpy.random.choice(string.ascii_lowercase, size=5, replace=False)
Dannid
21
>>> import random
>>> import string    
>>> random.choice(string.ascii_lowercase)
'b'
Taylor Leese
sumber
13

Cara lain, untuk kelengkapan:

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

Gunakan fakta bahwa ascii'a' adalah 97, dan ada 26 huruf dalam alfabet.

Saat menentukan batas atas dan bawah dari random.randrange()pemanggilan fungsi, ingatlah bahwa random.randrange()itu eksklusif pada batas atasnya, artinya hanya akan menghasilkan bilangan bulat hingga 1 unit lebih sedikit dari nilai yang diberikan.

rlotun
sumber
3
Itu tergantung pada alfabet apa yang sedang kita bicarakan ;-)
Joey
bukankah seharusnya begitu chr(random.randrange(97, 97 + 26 - 1))?
zhongxiao37
1
@ zhongxiao37 Sungguh, seharusnya begitu chr(random.randrange(97, 97 + 26). random.randrange()bersifat eksklusif pada batas atasnya, yang berarti bahwa untuk mendapatkan seluruh jajaran karakter 97 - 122, argumen yang dilewati haruslah 123.
Kieran Moynihan
@KieranMoynihan Terima kasih telah berbagi. Saya mengeceknya dan Anda benar. Sekarang saya mengerti mengapa 97 + 26digunakan.
zhongxiao37
6

Anda dapat menggunakan ini untuk mendapatkan satu atau lebih huruf acak

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']
salin
sumber
@NigelRen apa distribusi random.choices?
Jimmy
@SalmanLashkarara help(random.choices)menyatakan If the relative weights or cumulative weights are not specified, the selections are made with equal probability.Ini berarti, bahwa distribusinya adalah distribusi seragam diskrit ( en.wikipedia.org/wiki/Discrete_uniform_distribution ).
Qaswed
5

Anda bisa membuat daftar:

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

Kamu bisa memakai

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

Anda bisa mendapatkan string acak seperti ini:

g9CtUljUWD9wtk1z07iF
ndPbI1DDn6UvHSQoDMtd
klMFY3pTYNVWsNJ6cs34
Qgr7OEalfhXllcFDGh2l
王孝先
sumber
1. Dengan Python3, itu akan menjadi string.ascii_letters2. Anda dapat menyimpan pemahaman daftar dengan menggunakan keylist = random.choices(base_str(), k=KEY_LEN)3. Mengapa memiliki base_strfungsi dan bukan 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
pengguna9739613
sumber
0

Semua jawaban sebelumnya benar, jika Anda mencari karakter acak dari berbagai jenis (yaitu karakter alfanumerik dan khusus) maka di sini adalah skrip yang saya buat untuk menunjukkan berbagai jenis membuat fungsi acak, ia memiliki tiga fungsi satu untuk angka, alfa karakter dan karakter khusus. Script hanya menghasilkan kata sandi dan hanya sebuah contoh untuk menunjukkan berbagai cara menghasilkan karakter acak.

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

Hasil:

masukkan deskripsi gambar di sini

grepit
sumber
-1

baiklah, ini jawaban saya! Ini bekerja dengan baik. Cukup masukkan jumlah huruf acak yang Anda inginkan di 'angka' ... (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
sumber
-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
sumber
-1

Sepotong kode saya yang terlalu rumit:

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

Ini pada dasarnya menghasilkan nomor acak dari 26 dan kemudian mengubahnya menjadi huruf yang sesuai. Ini bisa diperbaiki tapi saya hanya pemula dan saya bangga dengan kode ini.

Nit Nore
sumber
4
jawaban Anda perlu ditingkatkan dan tidak terlalu fungsional.
grepit
1
dalam kasus Anda, Anda hanya dapat melakukannya print(chr(96 + letter)), tidak if- elifneraka diperlukan
Azat Ibrakov
-3

Mungkin ini bisa membantu Anda:

import random
for a in range(64,90):
    h = random.randint(64, a)
    e += chr(h)
print e
Peter
sumber
Mengapa Anda beralih antara 64 dan 90? Mengapa tidak beralih dari 0 ke 26, dan mengimbangi? Jawaban ini sangat buruk, hasilnya hampir tidak acak:@AAADCCEHFGJLDJF@EHFMHKWUR
Matt M.
-6

Tempatkan python pada keyboard dan biarkan dia menggulung surat-surat sampai Anda menemukan kombo acak preferd Anda Hanya bercanda!

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
sumber
2
Selamat Datang di Stack Overflow! Meskipun ini adalah jawaban yang baik, ini identik dengan jawaban yang sudah diposting dan diterima oleh @MarkRushakoff, dijawab dua tahun lalu. Harap tinjau jawaban sebelum Anda memposting sehingga kami dapat menjaga rasio sinyal terhadap noise tetap rendah.
Hooked