পাইথনে একটি এলোমেলো চিঠি তৈরি করুন


146

পাইথনে এলোমেলো চিঠি উত্পন্ন করার কোনও উপায় আছে (র্যান্ডম.র্যান্ডিন্টের মতো তবে অক্ষরের জন্য)? র্যান্ডম.রান্ডিন্টের পরিসীমা কার্যকারিতাটি দুর্দান্ত তবে এমন একটি জেনারেটর রয়েছে যা কেবল একটি এলোমেলো চিঠি আউটপুট করে দেয় কিছুই না থেকে ভাল।

উত্তর:


247

সরল:

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

string.ascii_letters বর্তমান লোকেল অনুসারে লোয়ার কেস এবং বড় হাতের অক্ষর সম্বলিত একটি স্ট্রিং প্রদান করে।

random.choice একটি অনুক্রম থেকে একটি একক, এলোমেলো উপাদান প্রদান করে returns


12
এটি আসলে স্ট্রিং.এএসসিআই-ফ্লোরকেস বা স্ট্রিং.এএসসিআই_উপরেসেস।
টেলর লিজ

9
প্রায়শই, আমার এলোমেলো একটি স্ট্রিং দরকার, এটি এখানে (পরে from string import ascii_letters, digitsএবং from random import choice):''.join([choice(ascii_letters + digits) for i in range(32)])
ডেভিন

7
@ জোয়াকুইন স্ট্রিং.লেটারগুলি পাইথন ২.7..7 এ উপস্থিত রয়েছে।
উইলসন কান্ডা

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

এটি নিম্ন বা বড় হাতের হতে পারে। নিশ্চিত যে এটি প্রয়োজন হয় কিনা।
টেলর লিজ

3
@TaylorLeese, যেমন আমার জানা আছে সহ তিনটি বিকল্প আছে ascii_letters, ascii_uppercaseএবং 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 সংখ্যা তৈরি করতে


7
এছাড়াও:''.join(random.sample(string.ascii_lowercase,5))
ড্যানিড

@ ড্যানিড ইনপুট থেকে মানগুলির random.sample()একটি অনন্য সেট ফেরৎ দেবে না , যা এর মতো নয় random.choice()?
ড্রিপি

হ্যাঁ, যদিও আপনি মাত্র এক চিঠি যে একটি পার্থক্য উপরন্তু দেখা যায় না নির্বাচন হয়ে গেলে, আপনি চাইতে পারেন 5 বার আলাদা আলাদা চিঠি - ওপি উল্লেখ করা হয়নি, এবং উভয় random.choiceএবং random.randintএকটি একক মান ফিরে। আপনি numpy.random.choiceযদি এর পরিবর্তে = মিথ্যা, যোগ করেন তবে একটি অনন্য সেট দিতেও আপনি ব্যবহার করতে পারেন:numpy.random.choice(string.ascii_lowercase, size=5, replace=False)
ড্যানিড


13

সম্পূর্ণতার জন্য আরেকটি উপায়:

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

সত্য যে ব্যবহার করুন ascii'একটি' 97, এবং বর্ণমালার মধ্যে 26 অক্ষর আছে।

random.randrange()ফাংশন কলের উপরের এবং নিম্ন সীমাটি নির্ধারণ করার সময় , মনে রাখবেন যে random.randrange()এটি তার উপরের বাউন্ডে একচেটিয়া, যার অর্থ এটি কেবলমাত্র প্রদান করা মানের চেয়ে কম 1 ইউনিট অবধি পূর্ণসংখ্যার উত্পন্ন করবে।


3
এটি আমরা যে বর্ণমালা সম্পর্কে কথা বলছি তার উপর নির্ভর করে ;-)
জোয়

এটা করা উচিত নয় chr(random.randrange(97, 97 + 26 - 1))?
zhongxiao37

1
@ zhongxiao37 সত্যিই, এটি হওয়া উচিত chr(random.randrange(97, 97 + 26)random.randrange()এটির উপরের বাউন্ডে একচেটিয়া, অর্থাত্ অক্ষরের পুরো পরিসীমা পেতে 97 - 122, আর্গুমেন্টটি অবশ্যই পাস করা উচিত 123
কায়রান ময়নিহান

কায়রান ময়নিহান শেয়ার করার জন্য ধন্যবাদ আমি এটি দ্বিগুণ করে দেখেছি এবং আপনি ঠিক বলেছেন। এখন আমি কেন 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']

@ নিগেলেন কীভাবে বিতরণ করবেন 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 )।
কাসউদ

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

পাইথন 3 এর সাহায্যে এটি string.ascii_letters2 হবে You ব্যবহার করে আপনি তালিকা বোধগম্যতা সংরক্ষণ করতে পারেন keylist = random.choices(base_str(), k=KEY_LEN)3. কেন base_strএকটি ফাংশন হিসাবে এবং একটি হিসাবে নয় base_str = string.ascii_letters+string.digits?
কাসউদ

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

এটি মূলত ২ of টির মধ্যে একটি এলোমেলো সংখ্যা তৈরি করে এবং তারপরে তার সংশ্লিষ্ট চিঠিতে রূপান্তর করে। এটিকে অসম্পূর্ণভাবে উন্নত করা যেতে পারে তবে আমি কেবল এক শিক্ষানবিস এবং কোডের এই অংশটি নিয়ে আমি গর্বিত।


4
আপনার উত্তরের উন্নতি প্রয়োজন এবং এটি খুব কার্যকরী নয়।
25:58

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
স্ট্যাক ওভারফ্লোতে স্বাগতম! যদিও এটি একটি ভাল উত্তর, এটি দু'বছর পূর্বে উত্তর দেওয়া হয়েছে @ মার্করশাকফের দ্বারা ইতিমধ্যে পোস্ট করা এবং স্বীকৃত উত্তরের অনুরূপ । আপনি পোস্ট করার আগে দয়া করে উত্তরগুলি পর্যালোচনা করুন যাতে আমরা শব্দ অনুপাতের সংকেতটি কম রাখতে পারি।
লাগানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.