पायथन में एक यादृच्छिक पत्र उत्पन्न करें


147

क्या पायथन में यादृच्छिक अक्षरों को उत्पन्न करने का एक तरीका है (जैसे यादृच्छिक। वर्ण के लिए लेकिन अक्षरों के लिए)? Random.randint की रेंज कार्यक्षमता अच्छा होगा लेकिन एक जनरेटर है कि सिर्फ एक यादृच्छिक पत्र outputs कुछ भी नहीं से बेहतर होगा।

जवाबों:


248

सरल:

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

string.ascii_letters वर्तमान लोकेल के अनुसार लोअर केस और अपर केस लेटर्स युक्त स्ट्रिंग देता है।

random.choice एक अनुक्रम से एक एकल, यादृच्छिक तत्व देता है।


12
यह वास्तव में string.ascii_lowercase या string.ascii_uppercase है।
टेलर लेसे

9
अक्सर, मुझे रंडियों की एक स्ट्रिंग की आवश्यकता होती है, यहां वह (बाद from string import ascii_letters, digitsऔर from random import choice) है:''.join([choice(ascii_letters + digits) for i in range(32)])
डेविन

7
@ मोजैक स्ट्रिंग.लेट्स अजगर 2.7.7 में मौजूद है।
विल्सन कांडा

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

यह कम या बड़ा हो सकता है। यकीन नहीं होता कि क्या जरूरत है।
टेलर लेसे

3
@TaylorLeese, जैसा कि मैंने जाना जाता है वहाँ सहित तीन विकल्प हैं कि ascii_letters, ascii_uppercase, और ascii_lowercase
त्रयोदशी

29
>>>def random_char(y):
       return ''.join(random.choice(string.ascii_letters) for x in range(y))

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

यादृच्छिक अक्षरों की y संख्या उत्पन्न करने के लिए


7
यह भी:''.join(random.sample(string.ascii_lowercase,5))
Dannid

@ डनीड इनपुट से मूल्यों का random.sample()एक अनूठा सेट नहीं लौटाता है , जो समान नहीं है random.choice()?
ड्रॉपी

हां, हालांकि यदि आप सिर्फ एक अक्षर का चयन कर रहे हैं, जिससे कोई फर्क नहीं पड़ता है, तो आप 5 अद्वितीय पत्र चाहते हैं - ओपी निर्दिष्ट नहीं किया गया था, और दोनों random.choiceऔर random.randintएक ही मान लौटाते हैं। numpy.random.choiceयदि आप प्रतिस्थापित = गलत जोड़ते हैं, तो आप एक अनूठा सेट देने के लिए भी उपयोग कर सकते हैं :numpy.random.choice(string.ascii_lowercase, size=5, replace=False)
Dannid


13

पूर्णता के लिए एक और तरीका:

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

इस तथ्य का उपयोग करें कि ascii'a' 97 है, और वर्णमाला में 26 अक्षर हैं।

random.randrange()फ़ंक्शन कॉल के ऊपरी और निचले बाउंड को निर्धारित करते समय , याद रखें कि random.randrange()यह अपने ऊपरी बाउंड पर अनन्य है, जिसका अर्थ है कि यह केवल 1 यूनिट तक एक पूर्णांक उत्पन्न करेगा जो प्रदान किए गए मान से कम है।


3
यह इस बात पर निर्भर करता है कि हम किस वर्णमाला के बारे में बात कर रहे हैं ;-)
जॉय

क्या यह नहीं होना चाहिए chr(random.randrange(97, 97 + 26 - 1))?
झोंगक्सीयाओ

1
@ zhongxiao37 वास्तव में, यह होना चाहिए chr(random.randrange(97, 97 + 26)random.randrange()अपने ऊपरी बाउंड पर अनन्य है, जिसका अर्थ है कि वर्णों की पूरी श्रृंखला प्राप्त करने के लिए 97 - 122, पास किया गया तर्क होना चाहिए 123
किरन मोयनिहान

@KieranMoynihan साझा करने के लिए धन्यवाद। मैंने डबल चेक किया कि और तुम सही हो। अब मैं देखता हूं कि 97 + 26इसका उपयोग क्यों किया जाता है।
३३ पर zhongxiao37

6

आप एक या अधिक यादृच्छिक अक्षर प्राप्त करने के लिए इसका उपयोग कर सकते हैं

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 का वितरण क्या है random.choices?
जिमी

@SalmanLashkarara में help(random.choices)कहा गया है If the relative weights or cumulative weights are not specified, the selections are made with equal probability.कि इसका अर्थ होगा, वितरण असतत समान वितरण ( en.wikipedia.org/wiki/Discrete_uniform_distribution ) है।
9

5

आप बस एक सूची बना सकते हैं:

import random
list1=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
b=random.randint(0,7)
print(list1[b])



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


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

आप इस तरह यादृच्छिक तार प्राप्त कर सकते हैं:

g9CtUljUWD9wtk1z07iF
ndPbI1DDn6UvHSQoDMtd
klMFY3pTYNVWsNJ6cs34
Qgr7OEalfhXllcFDGh2l

1. पायथन 3 के साथ, यह string.ascii_letters2 होगा । आप सूची का उपयोग करके समझ को बचा सकते हैं keylist = random.choices(base_str(), k=KEY_LEN)। 3. base_strफ़ंक्शन के रूप में क्यों है और ए नहीं है base_str = string.ascii_letters+string.digits?
13

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

पिछले सभी उत्तर सही हैं, यदि आप विभिन्न प्रकारों (यानी अल्फ़ान्यूमेरिक और विशेष वर्णों) के यादृच्छिक वर्णों की तलाश कर रहे हैं, तो यहाँ एक स्क्रिप्ट है जो मैंने विभिन्न प्रकार के यादृच्छिक कार्यों को प्रदर्शित करने के लिए बनाई है, इसमें संख्याओं के लिए तीन फ़ंक्शन एक हैं, अल्फा- वर्ण और विशेष वर्ण। स्क्रिप्ट बस पासवर्ड उत्पन्न करती है और यादृच्छिक वर्णों को उत्पन्न करने के विभिन्न तरीकों को प्रदर्शित करने के लिए सिर्फ एक उदाहरण है।

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

परिणाम:

यहां छवि विवरण दर्ज करें


-1

खैर, यह मेरा जवाब है! यह अच्छा काम करता है। बस आप 'नंबर' में इच्छित यादृच्छिक अक्षरों की संख्या डालें ... (पायथन 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

कोड की मेरी अत्यधिक जटिल टुकड़ा:

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

यह मूल रूप से 26 में से एक यादृच्छिक संख्या उत्पन्न करता है और फिर अपने संबंधित पत्र में परिवर्तित होता है। यह निश्चित रूप से सुधार किया जा सकता है लेकिन मैं केवल एक शुरुआतकर्ता हूं और मुझे इस कोड के टुकड़े पर गर्व है।


4
आपके उत्तर में सुधार की आवश्यकता है और यह बहुत कार्यात्मक नहीं है।
ग्रेपिट

1
आपके मामले में आप बस कर सकते हैं print(chr(96 + letter)), नहीं if- elifनरक की जरूरत है
अज़ात इब्रकोव

-3

शायद यह आपकी मदद कर सकता है:

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

क्यों आप 64 और 90 के बीच पुनरावृत्ति कर रहे हैं? क्यों न केवल 0 से 26 तक जाएं, और एक ऑफसेट? यह उत्तर काफी खराब है, आउटपुट शायद ही यादृच्छिक है:@AAADCCEHFGJLDJF@EHFMHKWUR
मैट एम।

-6

कीबोर्ड पर एक अजगर रखें और उसे अक्षरों पर रोल करने दें जब तक कि आपको अपना पसंदीदा रैंडम कॉम्बो न मिल जाए बस मजाक कर रहे हैं!

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
ढेर अतिप्रवाह में आपका स्वागत है! हालांकि यह एक अच्छा जवाब है यह है समान करने के लिए पहले से ही तैनात हैं और @MarkRushakoff द्वारा जवाब स्वीकार किए जाते हैं, दो साल पहले जवाब दे दिया। कृपया पोस्ट करने से पहले उत्तरों की समीक्षा करें ताकि हम शोर अनुपात को नीचे रख सकें।
आदी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.