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.

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.


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'

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


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'

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.


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

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


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

Kamu bisa memakai

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

Anda bisa mendapatkan string acak seperti ini:

g9CtUljUWD9wtk1z07iF
ndPbI1DDn6UvHSQoDMtd
klMFY3pTYNVWsNJ6cs34
Qgr7OEalfhXllcFDGh2l

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

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


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

-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

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.


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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.