আমি আকারের এন এর স্ট্রিং তৈরি করতে চাই
এটি সংখ্যা এবং বড় হাতের অক্ষরের সমন্বয়ে তৈরি করা উচিত যেমন:
- 6U1S75
- 4Z4UKK
- U911K4
আমি কীভাবে পাইথোনিক উপায়ে এটি অর্জন করতে পারি ?
আমি আকারের এন এর স্ট্রিং তৈরি করতে চাই
এটি সংখ্যা এবং বড় হাতের অক্ষরের সমন্বয়ে তৈরি করা উচিত যেমন:
আমি কীভাবে পাইথোনিক উপায়ে এটি অর্জন করতে পারি ?
উত্তর:
এক লাইনে উত্তর দিন:
''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))
বা পাইথন ৩.6 ব্যবহার করে আরও ছোট করে ব্যবহার করে random.choices()
:
''.join(random.choices(string.ascii_uppercase + string.digits, k=N))
একটি ক্রিপ্টোগ্রাফিকভাবে আরও সুরক্ষিত সংস্করণ; দেখতে https://stackoverflow.com/a/23728630/2213647 :
''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(N))
আরও পুনঃব্যবহারের জন্য বিশুদ্ধ ফাংশন সহ বিশদে:
>>> import string
>>> import random
>>> def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
... return ''.join(random.choice(chars) for _ in range(size))
...
>>> id_generator()
'G5G74W'
>>> id_generator(3, "6793YUIO")
'Y3U'
এটা কিভাবে কাজ করে ?
আমরা আমদানি করি string
, এমন একটি মডিউল যা সাধারণ ASCII অক্ষরগুলির ক্রম ধারণ করে এবং random
একটি মডিউল যা এলোমেলো প্রজন্মের সাথে সম্পর্কিত।
string.ascii_uppercase + string.digits
কেবলমাত্র বড় হাতের ASCII চরিত্র এবং অঙ্কগুলি উপস্থাপন করে এমন অক্ষরের তালিকার সাথে সম্মতি জানায়:
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> string.ascii_uppercase + string.digits
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
তারপরে আমরা 'এন' উপাদানগুলির একটি তালিকা তৈরি করতে একটি তালিকা বোঝার ব্যবহার করি:
>>> range(4) # range create a list of 'n' numbers
[0, 1, 2, 3]
>>> ['elem' for _ in range(4)] # we use range to create 4 times 'elem'
['elem', 'elem', 'elem', 'elem']
উপরের উদাহরণে, আমরা ব্যবহার [
তালিকা তৈরি করতে, কিন্তু আমরা নেই না id_generator
ফাংশন তাই পাইথন মেমরি তালিকা তৈরি করে না, কিন্তু উড়ে উপাদান, এক এক (এই সম্পর্কে আরো উত্পন্ন এখানে )।
স্ট্রিংটিকে 'এন' বার তৈরি করতে বলার পরিবর্তে elem
আমরা পাইথনকে অক্ষরগুলির ক্রম থেকে বেছে নেওয়া একটি এলোমেলো অক্ষর 'এন' বার তৈরি করতে বলব:
>>> random.choice("abcde")
'a'
>>> random.choice("abcde")
'd'
>>> random.choice("abcde")
'b'
অতএব random.choice(chars) for _ in range(size)
সত্যই size
অক্ষরের একটি ক্রম তৈরি করা হয় । অক্ষরগুলি যা এলোমেলোভাবে থেকে নেওয়া হয়েছে chars
:
>>> [random.choice('abcde') for _ in range(3)]
['a', 'b', 'b']
>>> [random.choice('abcde') for _ in range(3)]
['e', 'b', 'e']
>>> [random.choice('abcde') for _ in range(3)]
['d', 'a', 'c']
তারপরে আমরা কেবল তাদের সাথে একটি খালি স্ট্রিংয়ের সাথে যোগদান করি যাতে ক্রমটি স্ট্রিংয়ে পরিণত হয়:
>>> ''.join(['a', 'b', 'b'])
'abb'
>>> [random.choice('abcde') for _ in range(3)]
['d', 'c', 'b']
>>> ''.join(random.choice('abcde') for _ in range(3))
'dac'
range
সঙ্গে xrange
।
random
সাথে প্রতিস্থাপন করা উচিত random.SystemRandom()
: github.com/django/django/blob/…
random.sample
অন্য কথায় অক্ষরের পুনরাবৃত্তি করার সম্ভাবনা ছাড়াই প্রতিস্থাপন ছাড়াই নমুনা তৈরি করে , যা ওপি'র প্রয়োজনীয়তার সাথে নয়। আমি মনে করি না এটি বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য কাম্য হবে be
এই স্ট্যাক ওভারফ্লো জিজ্ঞাসাটি "এলোমেলো স্ট্রিং পাইথন" এর জন্য গুগলের বর্তমান শীর্ষ ফলাফল। বর্তমান শীর্ষের উত্তরটি হ'ল:
''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))
এটি একটি দুর্দান্ত পদ্ধতি, তবে এলোমেলোভাবে PRNG ক্রিপ্টোগ্রাফিকভাবে নিরাপদ নয়। আমি ধরে নিই যে এই প্রশ্নটি নিয়ে গবেষণা করা অনেক লোক এনক্রিপশন বা পাসওয়ার্ডের জন্য এলোমেলো স্ট্রিং উত্পন্ন করতে চাইবে। আপনি উপরের কোডটিতে একটি ছোট পরিবর্তন করে নিরাপদে এটি করতে পারেন:
''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(N))
ব্যবহার random.SystemRandom()
শুধু র্যান্ডম ব্যবহারসমূহ, / dev / * স্নো মেশিনে urandom পরিবর্তে এবং CryptGenRandom()
উইন্ডোজে। এগুলি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত PRNGs। কোনও সুরক্ষিত পিআরএনজি প্রয়োজন এমন একটি অ্যাপ্লিকেশনটির random.choice
পরিবর্তে ব্যবহার random.SystemRandom().choice
করা সম্ভাব্য ধ্বংসাত্মক হতে পারে এবং এই প্রশ্নের জনপ্রিয়তা দেখিয়ে আমি বাজি ধরেছি যে ইতিমধ্যে বহুবার ভুল করা হয়েছে।
আপনি যদি পাইথন ৩..6 বা তার বেশি ব্যবহার করছেন তবে আপনি এমসিফের্টের উত্তরে বর্ণিত নতুন সিক্রেটস মডিউলটি ব্যবহার করতে পারেন :
''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(N))
মডিউল দস্তাবেজগুলি সুরক্ষিত টোকেন এবং সর্বোত্তম অনুশীলনগুলি তৈরি করার সুবিধাজনক উপায়গুলি নিয়েও আলোচনা করে ।
random
এটি সতর্ক করেছে: " সতর্কতা : এই মডিউলটির সিউডো-এলোমেলো জেনারেটরগুলি সুরক্ষা উদ্দেশ্যে ব্যবহার করা উচিত নয় os OS.urandom () বা সিস্টেমর্যান্ডম ব্যবহার করুন যদি আপনার কোনও ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত সিউডো-র্যান্ডম নম্বর জেনারেটরের প্রয়োজন হয়। " এখানে রেফ: র্যান্ডম.সিস্টেমর্যান্ডম এবং os.urandom
string.uppercase
যা লোকেল সেটের উপর নির্ভর করে অপ্রত্যাশিত ফলাফলের দিকে নিয়ে যেতে পারে। ব্যবহার string.ascii_uppercase
(বা string.ascii_letters + string.digits
base36 পরিবর্তে base62 জন্য) ক্ষেত্রে যেখানে এনকোডিং জড়িত মধ্যে নিরাপদ।
xrange
পরিবর্তে ব্যবহার করা ভাল range
, যখন প্রাক্তন একটি পুনরুক্তি তৈরি করে।
যদি ইউইউডিগুলি আপনার উদ্দেশ্যে ঠিক থাকে, তবে বিল্ট ইন ইউইড প্যাকেজটি ব্যবহার করুন ।
import uuid; uuid.uuid4().hex.upper()[0:6]
উদাহরণ:
import uuid
uuid.uuid4() #uuid4 => full random uuid
# Outputs something like: UUID('0172fc9a-1dac-4414-b88d-6b9a6feb91ea')
আপনার যদি আপনার ফর্ম্যাটটি ঠিক প্রয়োজন (উদাহরণস্বরূপ, "6U1S75"), আপনি এটি এটি করতে পারেন:
import uuid
def my_random_string(string_length=10):
"""Returns a random string of length string_length."""
random = str(uuid.uuid4()) # Convert UUID format to a Python string.
random = random.upper() # Make all characters uppercase.
random = random.replace("-","") # Remove the UUID '-'.
return random[0:string_length] # Return the random string.
print(my_random_string(6)) # For example, D9E50C
string_length
তা নির্ভর করে সংঘর্ষের সম্ভাবনা উদ্বেগের কারণ হতে পারে।
একটি সরল, দ্রুত, তবে কিছুটা কম এলোমেলো উপায় হ'ল random.sample
প্রতিটি বর্ণ আলাদাভাবে বেছে নেওয়ার পরিবর্তে ব্যবহার করা, যদি এন-পুনরাবৃত্তি অনুমোদিত হয়, তবে আপনার এলোমেলো ভিত্তিকে এন টাইম দিয়ে বাড়ান
import random
import string
char_set = string.ascii_uppercase + string.digits
print ''.join(random.sample(char_set*6, 6))
দ্রষ্টব্য: এলোমেলোভাবে। নমুনা চরিত্রের পুনঃব্যবহার রোধ করে, চরিত্রের আকারের গুণকে একাধিক পুনরাবৃত্তি সম্ভব করে তোলে, তবে এগুলি এখনও নিখুঁত এলোমেলো পছন্দে হওয়ার সম্ভাবনা কম। যদি আমরা 6 দৈর্ঘ্যের স্ট্রিংয়ের জন্য যাই, এবং আমরা 'এক্স'টিকে প্রথম অক্ষর হিসাবে বেছে নিই, উদাহরণস্বরূপ, দ্বিতীয় অক্ষরের জন্য' এক্স 'পাওয়ার অভ্যাসটি' এক্স 'পাওয়ার মতভেদ হিসাবে একই প্রথম চরিত্র। র্যান্ডম.সাম্পল বাস্তবায়নে, পরবর্তী কোনও চরিত্র হিসাবে 'এক্স' পাওয়ার প্রতিকূলতা কেবল প্রথম চরিত্র হিসাবে পাওয়ার সম্ভাবনা কেবল 6/7
sample
একই অক্ষরটি আপনি কখনও দুবার তালিকাভুক্ত পাবেন না। অবশ্যই এটি এর N
চেয়েও বেশি ব্যর্থ হবে 36
।
import uuid
lowercase_str = uuid.uuid4().hex
lowercase_str
মত একটি এলোমেলো মান 'cea8b32e00934aaea8c005a35d85a5c0'
uppercase_str = lowercase_str.upper()
uppercase_str
হয় 'CEA8B32E00934AAEA8C005A35D85A5C0'
uppercase_str[:N+1]
এটি করার একটি দ্রুত, সহজ এবং আরও নমনীয় উপায় হ'ল strgen
মডিউলটি ( pip install StringGenerator
) ব্যবহার করা ।
বড় হাতের অক্ষর এবং অঙ্কগুলি সহ একটি 6-বর্ণের এলোমেলো স্ট্রিং উত্পন্ন করুন:
>>> from strgen import StringGenerator as SG
>>> SG("[\u\d]{6}").render()
u'YZI2CI'
একটি অনন্য তালিকা পান:
>>> SG("[\l\d]{10}").render_list(5,unique=True)
[u'xqqtmi1pOk', u'zmkWdUr63O', u'PGaGcPHrX2', u'6RZiUbkk2i', u'j9eIeeWgEF']
স্ট্রিংয়ের একটি "বিশেষ" চরিত্রের গ্যারান্টি দিন :
>>> SG("[\l\d]{10}&[\p]").render()
u'jaYI0bcPG*0'
একটি এলোমেলো এইচটিএমএল রঙ:
>>> SG("#[\h]{6}").render()
u'#CEdFCa'
প্রভৃতি
আমাদের সচেতন হওয়া দরকার যে এটি:
''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))
এটিতে কোনও অঙ্ক (বা বড় হাতের অক্ষর) নাও থাকতে পারে।
strgen
উপরের সমাধানগুলির তুলনায় বিকাশকারী সময়ে দ্রুত। Ignacio থেকে সমাধানটি দ্রুততম রান-টাইম পারফরম্যান্স এবং পাইথন স্ট্যান্ডার্ড লাইব্রেরিটি ব্যবহার করে সঠিক উত্তর। তবে আপনি কখনই এটিকে ফর্মটিতে ব্যবহার করবেন না। আপনি সিস্টেমআরডম (বা উপলভ্য না হলে ফ্যালব্যাক) ব্যবহার করতে চান, প্রয়োজনীয় অক্ষর সেটগুলি উপস্থাপিত হয়েছে কিনা তা নিশ্চিত করুন, ইউনিকোড ব্যবহার করুন (বা না), ক্রমাগত আমন্ত্রণগুলি একটি অনন্য স্ট্রিং তৈরি করেছে তা নিশ্চিত করুন, স্ট্রিং মডিউল চরিত্র শ্রেণীর একটির একটি উপসেট ব্যবহার করুন, ইত্যাদির জন্য সরবরাহকৃত উত্তরের চেয়ে অনেক বেশি কোডের প্রয়োজন। একটি সমাধানকে সাধারণীকরণের বিভিন্ন প্রয়াসের সমস্ত সীমাবদ্ধতা রয়েছে যা একটি সাধারণ টেমপ্লেট ভাষা ব্যবহার করে বৃহত্তর ব্রেভিটি এবং এক্সপ্রেসিভ শক্তি দিয়ে সমাধান করে।
এটি পিপিআইতে রয়েছে:
pip install StringGenerator
প্রকাশ: আমি স্টারজেন মডিউলটির লেখক।
পাইথন ৩.6 থেকে আপনার secrets
মডিউলটি ব্যবহার করা উচিত যদি আপনার মডিউলের পরিবর্তে ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত হওয়া প্রয়োজনrandom
(অন্যথায় এই উত্তরটি @ ইগনাসিও ওয়াজকেজ-আব্রামগুলির একটির মতো):
from secrets import choice
import string
''.join([choice(string.ascii_uppercase + string.digits) for _ in range(N)])
একটি অতিরিক্ত নোট: str.join
একটি জেনারেটর এক্সপ্রেশন ব্যবহারের চেয়ে একটি তালিকা-উপলব্ধি দ্রুততর হয় !
অন্য স্ট্যাক ওভারফ্লো উত্তরের উপর ভিত্তি করে, একটি এলোমেলো স্ট্রিং এবং এলোমেলো হেক্সাডেসিমেল সংখ্যা তৈরির সর্বাধিক হালকা উপায় , গৃহীত উত্তরের চেয়ে ভাল সংস্করণ হবে:
('%06x' % random.randrange(16**6)).upper()
অনেক দ্রুত.
N
।
যদি আপনার ছদ্ম এলোমেলো স্ট্যান্ডের পরিবর্তে এলোমেলো স্ট্রিং দরকার os.urandom
হয় তবে আপনার উত্স হিসাবে ব্যবহার করা উচিত
from os import urandom
from itertools import islice, imap, repeat
import string
def rand_string(length=5):
chars = set(string.ascii_uppercase + string.digits)
char_gen = (c for c in imap(urandom, repeat(1)) if c in chars)
return ''.join(islice(char_gen, None, length))
os.urandom
সিউডো এলোমেলোভাবে কীভাবে হয় না? এটি সম্ভবত আরও এলোমেলো সংখ্যাগুলি তৈরি করতে আরও ভাল অ্যালগরিদম ব্যবহার করছে তবে এটি এখনও ছদ্ম র্যান্ডম।
/dev/random
এবং এর মধ্যে পার্থক্য সম্পর্কে সচেতন /dev/urandom
। সমস্যাটি হ'ল /dev/random
যখন পর্যাপ্ত এনট্রপি থাকে না যা এটির কার্যকারিতা সীমিত করে। একটি জন্য এক সময় প্যাড /dev/urandom
যথেষ্ট নয়, কিন্তু আমি মনে করি এটা ছদ্ম র্যান্ডম এখানে চেয়ে ভালো।
/dev/random
এবং /dev/urandom
সিউডো এলোমেলো, তবে এটি আপনার সংজ্ঞার উপর নির্ভর করে।
আমি ভেবেছিলাম এখনও কেউ এই উত্তর দেয় নি LOL! তবে ওহে, এখানে আমার নিজের যেতে হবে:
import random
def random_alphanumeric(limit):
#ascii alphabet of all alphanumerals
r = (range(48, 58) + range(65, 91) + range(97, 123))
random.shuffle(r)
return reduce(lambda i, s: i + chr(s), r[:random.randint(0, len(r))], "")
এই পদ্ধতিটি এলোমেলো.চয়েস () পদ্ধতি ইগনাসিও পোস্ট করার চেয়ে কিছুটা দ্রুত এবং কিছুটা বিরক্তিকর।
এটি সিউডো-র্যান্ডম অ্যালগরিদমগুলির প্রকৃতি এবং বিটওয়াসা এবং ব্যাঙ্কগুলি প্রতিটি চরিত্রের জন্য একটি নতুন এলোমেলো সংখ্যা তৈরির চেয়ে দ্রুততর স্থান গ্রহণ করে।
# must be length 32 -- 5 bits -- the question didn't specify using the full set
# of uppercase letters ;)
_ALPHABET = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'
def generate_with_randbits(size=32):
def chop(x):
while x:
yield x & 31
x = x >> 5
return ''.join(_ALPHABET[x] for x in chop(random.getrandbits(size * 5))).ljust(size, 'A')
... এমন একটি জেনারেটর তৈরি করুন যা একবারে 0..31 এ 5 বিট সংখ্যা বের করে না ফেলে যতক্ষণ না কোনটি না ফেলে
... যোগদান করুন () ডান বিট সহ একটি এলোমেলো সংখ্যায় জেনারেটরের ফলাফল
টাইমিট সহ, 32-চরিত্রের স্ট্রিংয়ের জন্য সময়টি ছিল:
[('generate_with_random_choice', 28.92901611328125),
('generate_with_randbits', 20.0293550491333)]
... তবে character৪ টি চরিত্রের জন্য, খরগোশ হারিয়ে যায়;)
আমি যদি সত্যিই আমার সহকর্মীদের অপছন্দ না করি তবে আমি সম্ভবত উত্পাদন কোডে এই পদ্ধতির ব্যবহার করব না।
সম্পাদনা: প্রশ্নের অনুসারে আপডেট হয়েছে (কেবলমাত্র বড় এবং বড় সংখ্যা) এবং বিটওয়াইড অপারেটর এবং এবং >>% এবং // এর পরিবর্তে ব্যবহার করুন
আমি এটি এইভাবে করব:
import random
from string import digits, ascii_uppercase
legals = digits + ascii_uppercase
def rand_string(length, char_set=legals):
output = ''
for _ in range(length): output += random.choice(char_set)
return output
বা শুধু:
def rand_string(length, char_set=legals):
return ''.join( random.choice(char_set) for _ in range(length) )
নম্পির র্যান্ডম.চয়েস () ফাংশনটি ব্যবহার করুন
import numpy as np
import string
if __name__ == '__main__':
length = 16
a = np.random.choice(list(string.ascii_uppercase + string.digits), length)
print(''.join(a))
ডকুমেন্টেশন এখানে http://docs.scipy.org/doc/numpy-1.10.0/references/generated/numpy.random.choice.html
>>> import string
>>> import random
নিম্নলিখিত যুক্তিটি এখনও 6 টি চরিত্রের এলোমেলো নমুনা উত্পন্ন করে
>>> print ''.join(random.sample((string.ascii_uppercase+string.digits),6))
JT7K3Q
6 দিয়ে গুণ করার দরকার নেই
>>> print ''.join(random.sample((string.ascii_uppercase+string.digits)*6,6))
TK82HK
আপনারা যারা কার্যকরী অজগর উপভোগ করেন তাদের জন্য:
from itertools import imap, starmap, islice, repeat
from functools import partial
from string import letters, digits, join
from random import choice
join_chars = partial(join, sep='')
identity = lambda o: o
def irand_seqs(symbols=join_chars((letters, digits)), length=6, join=join_chars, select=choice, breakup=islice):
""" Generates an indefinite sequence of joined random symbols each of a specific length
:param symbols: symbols to select,
[defaults to string.letters + string.digits, digits 0 - 9, lower and upper case English letters.]
:param length: the length of each sequence,
[defaults to 6]
:param join: method used to join selected symbol,
[defaults to ''.join generating a string.]
:param select: method used to select a random element from the giving population.
[defaults to random.choice, which selects a single element randomly]
:return: indefinite iterator generating random sequences of giving [:param length]
>>> from tools import irand_seqs
>>> strings = irand_seqs()
>>> a = next(strings)
>>> assert isinstance(a, (str, unicode))
>>> assert len(a) == 6
>>> assert next(strings) != next(strings)
"""
return imap(join, starmap(breakup, repeat((imap(select, repeat(symbols)), None, length))))
এটি প্রথমে প্রদত্ত পুল থেকে এলোমেলোভাবে নির্বাচিত প্রতীকের অনির্দিষ্ট ক্রম তৈরির পরে একটি অনির্দিষ্ট [অসীম] পুনরুক্তি তৈরি করে, তারপরে এই অনুক্রমটিকে দৈর্ঘ্যের অংশগুলিতে ভেঙে দেয় যা পরে যুক্ত হয়, এটি গেটাইটেম সমর্থন করে এমন কোনও ক্রম দিয়ে কাজ করবে , ডিফল্টরূপে এটি কেবল আলফা সংখ্যাসূচক বর্ণগুলির একটি এলোমেলো ক্রম উত্পন্ন করে, যদিও আপনি সহজেই অন্যান্য জিনিস উত্পন্ন করতে পরিবর্তন করতে পারেন:
উদাহরণস্বরূপ অঙ্কের এলোমেলো tuples উত্পাদন:
>>> irand_tuples = irand_seqs(xrange(10), join=tuple)
>>> next(irand_tuples)
(0, 5, 5, 7, 2, 8)
>>> next(irand_tuples)
(3, 2, 2, 0, 3, 1)
আপনি যদি প্রজন্মের জন্য পরবর্তীটি ব্যবহার না করতে চান তবে আপনি কেবল এটিকে কল করতে পারেন:
>>> irand_tuples = irand_seqs(xrange(10), join=tuple)
>>> make_rand_tuples = partial(next, irand_tuples)
>>> make_rand_tuples()
(1, 6, 2, 8, 1, 9)
আপনি যদি উড়ানের ক্রমটি তৈরি করতে চান তবে কেবল পরিচয়টিতে যোগ দিন।
>>> irand_tuples = irand_seqs(xrange(10), join=identity)
>>> selections = next(irand_tuples)
>>> next(selections)
8
>>> list(selections)
[6, 3, 8, 2, 2]
অন্যরা যেমন উল্লেখ করেছে যে আপনার যদি আরও সুরক্ষার প্রয়োজন হয় তবে উপযুক্ত নির্বাচন ফাংশনটি সেট করুন:
>>> from random import SystemRandom
>>> rand_strs = irand_seqs(select=SystemRandom().choice)
'QsaDxQ'
ডিফল্ট নির্বাচক choice
যা প্রতিটি অংশের জন্য একই প্রতীকটি একাধিকবার নির্বাচন করতে পারে, পরিবর্তে যদি আপনি একই অংশটি প্রতিটি অংশের জন্য একবারে নির্বাচিত করতে চান, তবে একটি সম্ভাব্য ব্যবহার:
>>> from random import sample
>>> irand_samples = irand_seqs(xrange(10), length=1, join=next, select=lambda pool: sample(pool, 6))
>>> next(irand_samples)
[0, 9, 2, 3, 1, 6]
sample
সম্পূর্ণ নির্বাচনের জন্য আমরা আমাদের নির্বাচক হিসাবে ব্যবহার করি, তাই খণ্ডগুলি প্রকৃতপক্ষে দৈর্ঘ্য 1, এবং যোগদানের জন্য আমরা কেবল কল করি next
যা পরবর্তী সম্পূর্ণরূপে উত্পন্ন অংশ নিয়ে আসে, এই উদাহরণটি কিছুটা জটিল বলে মনে হয় এবং এটি ...
(1) এটি আপনাকে সমস্ত ক্যাপ এবং নম্বর দেবে:
import string, random
passkey=''
for x in range(8):
if random.choice([1,2]) == 1:
passkey += passkey.join(random.choice(string.ascii_uppercase))
else:
passkey += passkey.join(random.choice(string.digits))
print passkey
(২) আপনি যদি পরে আপনার কীতে ছোট হাতের অক্ষর অন্তর্ভুক্ত করতে চান তবে এটিও কাজ করবে:
import string, random
passkey=''
for x in range(8):
if random.choice([1,2]) == 1:
passkey += passkey.join(random.choice(string.ascii_letters))
else:
passkey += passkey.join(random.choice(string.digits))
print passkey
এটি অনুরাগ ইউনিিয়ালের প্রতিক্রিয়া এবং এমন কিছু যা আমি নিজের উপর কাজ করছিলাম on
import random
import string
oneFile = open('Numbers.txt', 'w')
userInput = 0
key_count = 0
value_count = 0
chars = string.ascii_uppercase + string.digits + string.punctuation
for userInput in range(int(input('How many 12 digit keys do you want?'))):
while key_count <= userInput:
key_count += 1
number = random.randint(1, 999)
key = number
text = str(key) + ": " + str(''.join(random.sample(chars*6, 12)))
oneFile.write(text + "\n")
oneFile.close()
>>> import random
>>> str = []
>>> chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
>>> num = int(raw_input('How long do you want the string to be? '))
How long do you want the string to be? 10
>>> for k in range(1, num+1):
... str.append(random.choice(chars))
...
>>> str = "".join(str)
>>> str
'tm2JUQ04CK'
random.choice
ফাংশন একটি তালিকায় একটি র্যান্ডম এন্ট্রি পছন্দ। আপনি একটি তালিকাও তৈরি করেন যাতে আপনি for
বিবৃতিতে অক্ষরটি যুক্ত করতে পারেন । প্রান্তের শেষে ['টি', 'এম', '২', 'জে', 'ইউ', 'কিউ', '০', '৪', 'সি', 'কে'] রয়েছে তবে str = "".join(str)
গ্রহণগুলি যে যত্ন, আপনাকে ছেড়ে 'tm2JUQ04CK'
।
আশাকরি এটা সাহায্য করবে!
range(num)
পরিবর্তে ব্যবহার করতে পারতেন , এবং str একটি স্ট্রিংও হতে পারে str += random.choice(chars)
।
import string
from random import *
characters = string.ascii_letters + string.punctuation + string.digits
password = "".join(choice(characters) for x in range(randint(8, 16)))
print password
import random
q=2
o=1
list =[r'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','s','0','1','2','3','4','5','6','7','8','9','0']
while(q>o):
print("")
for i in range(1,128):
x=random.choice(list)
print(x,end="")
এখানে লুপের জন্য স্ট্রিংয়ের দৈর্ঘ্য পরিবর্তন করা যেতে পারে অর্থাৎ আই রেঞ্জের জন্য (1, দৈর্ঘ্য) এটি সহজ অ্যালগরিদম যা বোঝা সহজ। এটি তালিকা ব্যবহার করে যাতে আপনার প্রয়োজনীয় অক্ষরগুলি বাতিল করতে পারেন।
একটি সাধারণ:
import string
import random
character = string.lowercase + string.uppercase + string.digits + string.punctuation
char_len = len(character)
# you can specify your password length here
pass_len = random.randint(10,20)
password = ''
for x in range(pass_len):
password = password + character[random.randint(0,char_len-1)]
print password
দুটি পদ্ধতি:
import random, math
def randStr_1(chars:str, length:int) -> str:
chars *= math.ceil(length / len(chars))
chars = letters[0:length]
chars = list(chars)
random.shuffle(characters)
return ''.join(chars)
def randStr_2(chars:str, length:int) -> str:
return ''.join(random.choice(chars) for i in range(chars))
মাপকাঠি :
from timeit import timeit
setup = """
import os, subprocess, time, string, random, math
def randStr_1(letters:str, length:int) -> str:
letters *= math.ceil(length / len(letters))
letters = letters[0:length]
letters = list(letters)
random.shuffle(letters)
return ''.join(letters)
def randStr_2(letters:str, length:int) -> str:
return ''.join(random.choice(letters) for i in range(length))
"""
print('Method 1 vs Method 2', ', run 10 times each.')
for length in [100,1000,10000,50000,100000,500000,1000000]:
print(length, 'characters:')
eff1 = timeit("randStr_1(string.ascii_letters, {})".format(length), setup=setup, number=10)
eff2 = timeit("randStr_2(string.ascii_letters, {})".format(length), setup=setup, number=10)
print('\t{}s : {}s'.format(round(eff1, 6), round(eff2, 6)))
print('\tratio = {} : {}\n'.format(eff1/eff1, round(eff2/eff1, 2)))
আউটপুট:
Method 1 vs Method 2 , run 10 times each.
100 characters:
0.001411s : 0.00179s
ratio = 1.0 : 1.27
1000 characters:
0.013857s : 0.017603s
ratio = 1.0 : 1.27
10000 characters:
0.13426s : 0.151169s
ratio = 1.0 : 1.13
50000 characters:
0.709403s : 0.855136s
ratio = 1.0 : 1.21
100000 characters:
1.360735s : 1.674584s
ratio = 1.0 : 1.23
500000 characters:
6.754923s : 7.160508s
ratio = 1.0 : 1.06
1000000 characters:
11.232965s : 14.223914s
ratio = 1.0 : 1.27
প্রথম পদ্ধতির পারফরম্যান্স আরও ভাল।
আমি প্রায় সমস্ত উত্তর যদিও চলেছি কিন্তু তাদের কোনোটাই সহজ দেখাচ্ছে না। আমি আপনাকে প্যাসেজ লাইব্রেরি চেষ্টা করার পরামর্শ দেব যা সাধারণত এলোমেলো পাসওয়ার্ড তৈরি করতে ব্যবহৃত হয়।
আপনি আপনার পছন্দ মতো দৈর্ঘ্য, বিরামচিহ্ন, অঙ্ক, অক্ষর এবং কেস এর এলোমেলো স্ট্রিং তৈরি করতে পারেন ।
আপনার মামলার কোড এখানে:
from passgen import passgen
string_length = int(input())
random_string = passgen(length=string_length, punctuation=False, digits=True, letters=True, case='upper')
এলোমেলো 16-বাইট আইডি ধারক অক্ষর, সংখ্যা, '_' এবং '-' তৈরি করুন
os.urandom(16).translate((f'{string.ascii_letters}{string.digits}-_'*4).encode('ascii'))
import string, random
lower = string.ascii_lowercase
upper = string.ascii_uppercase
digits = string.digits
special = '!"£$%^&*.,@#/?'
def rand_pass(l=4, u=4, d=4, s=4):
p = []
[p.append(random.choice(lower)) for x in range(l)]
[p.append(random.choice(upper)) for x in range(u)]
[p.append(random.choice(digits)) for x in range(d)]
[p.append(random.choice(special)) for x in range(s)]
random.shuffle(p)
return "".join(p)
print(rand_pass())
# @5U,@A4yIZvnp%51
আমি এটিকে সহজ এবং পরিষ্কার পরিচ্ছন্ন বলে মনে করেছি।
str_Key = ""
str_FullKey = ""
str_CharacterPool = "01234ABCDEFfghij~>()"
for int_I in range(64):
str_Key = random.choice(str_CharacterPool)
str_FullKey = str_FullKey + str_Key
দৈর্ঘ্য পরিবর্তনের জন্য কেবল 64 টি পরিবর্তন করুন, কেবলমাত্র আলফা কেবলমাত্র আলফা সংখ্যাসূচক বা সংখ্যাসূচক বা অদ্ভুত অক্ষর বা আপনি যা চান তা করতে চরিত্রপুলের পরিবর্তিত করুন।