Python'da rastgele bir harf üret


147

Python'da rastgele harfler üretmenin bir yolu var mı (random.randint gibi ama harfler için)? Random.randint aralığının işlevselliği iyi olurdu, ancak rastgele bir harf çıkaran bir jeneratöre sahip olmak hiçbir şeyden daha iyi olurdu.

Yanıtlar:


248

Basit:

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

string.ascii_letters geçerli yerel ayara göre küçük ve büyük harf içeren bir dize döndürür.

random.choice bir diziden tek bir rastgele öğe döndürür.


12
Aslında string.ascii_lowercase veya string.ascii_uppercase.
Taylor Leese

9
Genellikle, rastgele bir dizeye ihtiyacım var, işte (sonra from string import ascii_letters, digitsve sonra from random import choice):''.join([choice(ascii_letters + digits) for i in range(32)])
Devin

7
@joaquin string.letters python 2.7.7'de bulunmaktadır.
Wilson Canda

70
>>> import random
>>> import string
>>> random.choice(string.ascii_letters)
'g'

Bu küçük veya büyük olabilir. Bunun gerekli olup olmadığından emin değilim.
Taylor Leese

3
@TaylorLeese, orada da dahil olmak üzere üç seçenek olduğunu bilir gibi ascii_letters, ascii_uppercaseve 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

y rastgele sayı karakteri oluşturmak için


7
ayrıca:''.join(random.sample(string.ascii_lowercase,5))
Dannid

@Dannid Yapmaz random.sample() benzersiz bir değer kümesirandom.choice() ?
Droppy

OP belirtmedi ve her iki - Evet, ayrıca bir fark yapmaz sadece bir harf seçerek eğer olsa, sen 5 benzersiz harfleri isteyebilir random.choiceve random.randinttek bir değer döndürür. numpy.random.choiceReplace = False, gibi eklerseniz benzersiz bir set vermek için de kullanabilirsiniz :numpy.random.choice(string.ascii_lowercase, size=5, replace=False)
Dannid

21
>>> import random
>>> import string    
>>> random.choice(string.ascii_lowercase)
'b'

13

Başka bir yol, bütünlük için:

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

Gerçeği kullanın ascii'A' nın 97 olduğu ve alfabede 26 harf olduğu .

random.randrange()İşlev çağrısının üst ve alt sınırını belirlerken, random.randrange()bunun üst sınırında özel olduğunu unutmayın , yani sağlanan değerden yalnızca 1 birim daha az bir tamsayı üretecektir.


3
Bu hangi alfabe hakkında konuştuğumuza bağlıdır ;-)
Joey

öyle değil mi chr(random.randrange(97, 97 + 26 - 1))?
zhongxiao37

1
@ zhongxiao37 Gerçekten olmalı chr(random.randrange(97, 97 + 26). random.randrange()üst sınırında münhasırdır, yani tüm karakter aralığını elde etmek için 97 - 122geçilen argümanın olması gerekir 123.
Kieran Moynihan

@KieranMoynihan Paylaştığınız için teşekkürler. Bunu iki kez kontrol ettim ve haklısın. Şimdi neden 97 + 26kullanıldığını görüyorum .
zhongxiao37

6

Bir veya daha fazla rastgele harf (ler) elde etmek için bunu kullanabilirsiniz

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 dağılımı random.choicesnedir?
Jimmy

@SalmanLashkarara help(random.choices)devletleri If the relative weights or cumulative weights are not specified, the selections are made with equal probability.Bu, dağıtımın ayrı tekdüze dağılım olduğu anlamına gelir ( en.wikipedia.org/wiki/Discrete_uniform_distribution ).
Qaswed

5

Sadece bir liste yapabilirsiniz:

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

Kullanabilirsiniz

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

Bunun gibi rastgele dizeler alabilirsiniz:

g9CtUljUWD9wtk1z07iF
ndPbI1DDn6UvHSQoDMtd
klMFY3pTYNVWsNJ6cs34
Qgr7OEalfhXllcFDGh2l

1. Python3 ile bu 2 olur string.ascii_letters. Liste kavrayışını keylist = random.choices(base_str(), k=KEY_LEN)3 kullanarak kaydedebilirsiniz . Neden base_strbir fonksiyon olarak değil de base_str = string.ascii_letters+string.digits?
19'da 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

Önceki tüm cevaplar doğrudur, eğer çeşitli tipte rastgele karakterler (yani alfasayısal ve özel karakterler) arıyorsanız, o zaman burada rastgele fonksiyonlar yaratmanın çeşitli tiplerini göstermek için oluşturduğum bir komut dosyası, sayılar için bir tane, alfa- karakterler ve özel karakterler. Komut dosyası yalnızca parolalar oluşturur ve rastgele karakterler oluşturmanın çeşitli yollarını gösteren bir örnektir.

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

Sonuç:

resim açıklamasını buraya girin


-1

bu benim cevabım! İyi çalışıyor. İstediğiniz rasgele harflerin sayısını 'sayı'ya koyun ... (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

Aşırı karmaşık kod parçam:

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

Temel olarak 26'dan rastgele bir sayı üretir ve sonra karşılık gelen harfine dönüştürür. Bu meydan okurca geliştirilebilir ama ben sadece bir acemi ve bu kod parçası ile gurur duyuyorum.


4
cevabınızın iyileştirilmesi gerekiyor ve çok işlevsel değil.
grepit

1
sizin durumunuzda sadece yapabileceği print(chr(96 + letter))hayır, if- elifcehennem gerekli olan
Azat Ibrakov

-3

Belki bu size yardımcı olabilir:

import random
for a in range(64,90):
    h = random.randint(64, a)
    e += chr(h)
print e

Neden 64 ile 90 arasında yineliyorsunuz? Neden sadece 0'dan 26'ya gitmiyor ve a'yı dengeliyorsunuz? Bu cevap oldukça zayıf, çıktı neredeyse rastgele:@AAADCCEHFGJLDJF@EHFMHKWUR
Matt M. 23

-6

Klavyeye bir python yerleştirin ve tercih ettiğiniz rastgele açılanı bulana kadar harflerin üzerinden gitmesine izin verin Sadece şaka yapıyorum!

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
Stack Overflow'a hoş geldiniz! Bu iyi bir cevap olsa o özdeş zaten yayınlanmıştır ve @MarkRushakoff tarafından cevap kabul iki yıl önce cevap için. Sinyal-gürültü oranını düşük tutabilmemiz için lütfen göndermeden önce cevapları gözden geçirin.
Kancalı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.