কম্পিউটার টিউটোরিয়াল

পাইথনে র‍্যান্ডম ID জেনারেট করা


আমরা প্রজেক্টে স্যাম্পল ডেটার জন্য র‍্যান্ডম নম্বর জেনারেট করি, যা পরে টেস্টিং, খালি কলাম পূরণ বা অন্যান্য অনেক উদ্দেশ্যে ব্যবহার করা যায়। মূল কথা হলো আমাদের র‍্যান্ডম ডেটা জেনারেট করতে হবে। পাইথনে র‍্যান্ডম ডেটা জেনারেট করার অনেক পদ্ধতি রয়েছে, এখানে আমরা 그중 কিছু এক্সপ্লোর করব।

পাইথন random() মডিউল

পাইথনের সাথে আসা একটি গুরুত্বপূর্ণ লাইব্রেরি হলো random এবং আমরা আমাদের কোডে এই মডিউলটি সমস্ত gebrui করব।

আপনার কোডে এই মডিউলটি ব্যবহার করতে, আপনাকে শুধু ইম্পোর্ট করতে হবে, তাহলে আপনি ব্যবহার করার জন্য প্রস্তুত।

import random

দেখি কিভাবে ব্যবহার করতে হয়:

import random
print("What i will get, no idea as i'm using random.random()")
print(random.random())

আউটপুট

What i will get, no idea as i'm using random.random()
0.5306626723173611

দ্বিতীয় বার, যদি আমি একই প্রোগ্রামটি রান করি - আপনি ভিন্ন আউটপুট পাবেন:

What i will get, no idea as i'm using random.random()
0.5504289430397661

random মডিউল সম্পর্কে কিছু نکতা:

  • random() হলো random মডিউলের বেসিক ফাংশন।
  • random মডিউল των সব ফাংশন почти random() ফাংশন ব্যবহার করে।
  • Random() ফাংশন ০.০ থেকে ১.০ এর মধ্যে যেকোনো নম্বর জেনারেট করবে।

পাইথনে র‍্যান্ডম ইন্টিজার নম্বর জেনারেট করা

নিচের দুটি ফাংশন আমরা র‍্যান্ডম ইন্টিজার জেনারেট করতে ব্যবহার করি:

  • randint()
  • randrange()
from random import randint, randrange
print("Printing random integer ", randint(0, 20))
print("Printing random integer ", randrange(0, 20, 2))

আউটপুট

Printing random integer 15
Printing random integer 4

লিস্ট থেকে র‍্যান্ডমলি একটি আইটেম সিলেক্ট করা

মন লেইয়া যাক, আমাদের কোম্পানির নামের একটি লিস্ট আছে এবং আমরা সেটি থেকে একটি আইটেম (কোম্পানির নাম) রিট্রিভ করতে চাই। এটি আমরা এভাবে অর্জন করতে পারি:

import random
companies = ['RELIANCE', 'TCS', 'INFY', 'SBI', 'PNB', 'HDFC']
print('Randomly selecting company from a list: ', random.choice(companies))

আউটপুট

Randomly selecting company from a list: INFY

লিস্ট থেকে র‍্যান্ডমলি একাধিক আইটেম সিলেক্ট করা

উপরের উদাহরণের মত কিন্তু এক আইটেমের বদলে একাধিক আইটেম (কোম্পানিগুলো) র‍্যান্ডমলি লিস্ট থেকে সিলেক্ট করতে চাই, এটি অর্জন করা যায় random.sample() ফাংশন দিয়ে:

import random
companies = ['RELIANCE', 'TCS', 'INFY', 'SBI', 'PNB', 'HDFC']
print('Randomly selecting 3 companies from a list: ', random.sample(companies, 3))

আউটপুট

Randomly selecting 3 companies from a list: ['TCS', 'RELIANCE', 'INFY']

তবে, যদি আমরা লিস্টে থাকা আইটেমের চেয়ে বেশি আইটেম সিলেক্ট করার চেষ্টা করি, তবে ValueError এর সম্মুখীন হব:

ইনপুট:

random.sample(companies, 20)

আউটপুট:

ValueError: Sample larger than population or is negative

লিস্ট থেকে একাধিক র‍্যান্ডম আইটেম সিলেক্ট করার আরেকটি পদ্ধতি হলো - random.choices()।

import random
companies = ['RELIANCE', 'TCS', 'INFY', 'SBI', 'PNB', 'HDFC']
print('Randomly selecting 3 companies from a list: ', random.choices(companies, k=6))

আউটপুট

Randomly selecting 3 companies from a list: ['TCS', 'TCS', 'INFY', 'HDFC', 'INFY', 'TCS']

উপরের আউটপুট থেকে দেখা যাচ্ছে, random.choices() মেথড ব্যবহার করলে লিস্ট থেকে ডুপ্লিকেট আইটেম পাওয়া যায়।

পাইথনে সুডো-র‍্যান্ডম নম্বর জেনারেটর (Pseudo-random number generator)

সুডো-র‍্যান্ডম নম্বর জেনারেটর একটি ভ্যালুতে কিছু অপারেশন করেই কাজ করে। সাধারণত, এই ভ্যালুটি জেনারেটরের 의해 পূর্বে জেনারেট করা নম্বর। তবে, জেনারেটরটি প্রথমবার ব্যবহার করার সময়, কোনো পূর্বের ভ্যালু থাকে না।

import random
print("Seed value 10: ")
# সিড ভ্যালু ইনিশিয়ালাইজ
random.seed(10)
for i in range(5):
    print(random.randint(1, 100))
print()
print("Seed Value 5: ")
# এইবার আমরা ভিন্ন ভ্যালু পাব
random.seed(5)
for i in range(5):
    print(random.randint(1, 100))
print()
print("Seed value: 10")
# প্রথমে যা পেলাম সেটাই পাব
random.seed(10)
for i in range(5):
    print(random.randint(1, 100))

আউটপুট

Seed value 10:
74
5
55
62
74

Seed Value 5:
80
33
95
46
89

Seed value: 10
74
5
55
62
74

উপরের উদাহরণ থেকে দেখা যাচ্ছে, যদি সিড (seed) একই থাকে, তবে এটি পূর্বের প্রথম ভ্যালু জেনারেট করে। প্রতিটি সিড ভ্যালু একটি দिये गये র‍্যান্ডম নম্বর জেনারেটরের জন্য জেনারেটেড ভ্যালুর একটি ফিক্সড সিকোয়েন্সের সাথে মিলে যায়।

পাইথনে ক্রিপ্টোগ্রাফিক্যালি সিকিউর র‍্যান্ডম নম্বর জেনারেট করা

পাইথন ৩.x-এ ক্রিপ্টোগ্রাফিক্যালি সিকিউর র‍্যান্ডম নম্বর জেনারেট করা যায়। যদি পাইথন ৩.৬ বা তার উপরের ভার্সন থাকে, তবে আমরা নতুন secrets মডিউল এবং নিচের randbelow ফাংশন ব্যবহার করতে পারি। এটি নির্দিষ্ট ভ্যালুর নিচে একটি র‍্যান্ডম নম্বর জেনারেট করবে।

import secrets
# ১০ থেকে ৫০০ এর মধ্যে ১০টি সিকিউর র‍্যান্ডম নম্বর জেনারেট
for x in range(0, 10):
    secV = 10 + secrets.randbelow(500)
    print(secV)

আউটপুট

464
406
184
293
399
332
495
292
118
134

পাইথন ৩.৫ বা তার নিচের ভার্সনের জন্য, আমরা random মডিউল এবং SystemRandom ক্লাস ব্যবহার করে ক্রিপ্টোগ্রাফিক্যালি সিকিউর র‍্যান্ডম নম্বর জেনারেট করতে পারি:

import random
randGen = random.SystemRandom()
for x in range(0, 10):
    secV = 10 + randGen.randint(0, 499)
    print(secV)

আউটপুট

374
211
425
264
217
97
210
39
319
52

আরেকটি পদ্ধতি হলো random এবং secrets (ডেটা সিকিউর করার জন্য) মডিউল ব্যবহার করা।

import secrets
import random
secNum = random.SystemRandom().random()
print("secure number is ", secNum)
print("Secure byte token", secrets.token_bytes(16))

আউটপুট

secure number is 0.5205307353786663
Secure byte token b'\x05T>\xacsqn0\x08\xc4\xf4\x8aU\x13\x9f\xcf'
  1. Python-এ random.uniform মেথড কী?

  2. Python-এ অবজেক্টের লিস্ট শাফল করা

  3. Python-এ random.seed() কেন ব্যবহার করা হয়?

  4. রুবিতে র‍্যান্ডম নম্বর জেনারেশন শিখুন: টেকনিক এবং বেস্ট প্র্যাকটিস