উত্তর:
এলোমেলো 3-সংখ্যার নম্বর পেতে:
from random import randint
randint(100, 999) # randint is inclusive at both ends
(ধরে নিচ্ছেন আপনি "তিনটি সংখ্যা পর্যন্ত" চেয়ে তিনটি অঙ্কের সত্যই বোঝাচ্ছেন))
একটি সংখ্যা নির্বিচারে ব্যবহার করতে:
from random import randint
def random_with_N_digits(n):
range_start = 10**(n-1)
range_end = (10**n)-1
return randint(range_start, range_end)
print random_with_N_digits(2)
print random_with_N_digits(3)
print random_with_N_digits(4)
আউটপুট:
33
124
5127
যদি আপনি এটি স্ট্রিং হিসাবে চান (উদাহরণস্বরূপ, একটি 10-সংখ্যার ফোন নম্বর) আপনি এটি ব্যবহার করতে পারেন:
n = 10
''.join(["{}".format(randint(0, 9)) for num in range(0, n)])
আপনার যদি একটি 3 ডিজিটের নম্বর প্রয়োজন হয় এবং 001-099 টি বৈধ সংখ্যা হতে চান তবে বিকল্পের চেয়ে দ্রুততর হওয়ার কারণে আপনার এখনও র্যাণ্ডরঞ্জ / র্যান্ডিন্ট ব্যবহার করা উচিত। কোনও স্ট্রিংয়ে রূপান্তরিত করার সময় কেবল পূর্ববর্তী জিরোগুলি যুক্ত করুন।
import random
num = random.randrange(1, 10**3)
# using format
num_with_zeros = '{:03}'.format(num)
# using string's zfill
num_with_zeros = str(num).zfill(3)
বিকল্প হিসাবে যদি আপনি এন্টার হিসাবে র্যান্ডম নম্বরটি সংরক্ষণ করতে না চান তবে আপনি এটি অনলাইনার হিসাবে করতে পারেন:
'{:03}'.format(random.randrange(1, 10**3))
পাইথন ৩.+++ কেবলমাত্র অনলাইনার:
f'{random.randrange(1, 10**3):03}'
উপরের উদাহরণগুলি হ'ল:
একটি ফাংশন হিসাবে প্রয়োগ করা:
import random
def n_len_rand(len_, floor=1):
top = 10**len_
if floor > top:
raise ValueError(f"Floor {floor} must be less than requested top {top}")
return f'{random.randrange(floor, top):0{len_}}'
0 সম্ভাব্য প্রথম অঙ্ক হিসাবে গণনা করা হয়? যদি তা হয় তবে আপনার দরকার random.randint(0,10**n-1)
। যদি না হয় random.randint(10**(n-1),10**n-1)
,। এবং যদি শূন্যকে কখনই অনুমতি না দেওয়া হয়, তবে আপনাকে তাদের শূন্যের সাথে স্পষ্টভাবে সংখ্যাগুলি প্রত্যাখ্যান করতে হবে, বা আঁকতে হবেn
random.randint(1,9)
সংখ্যা ।
একদিকে: এটি আকর্ষণীয় যে randint(a,b)
এলোমেলো নম্বর পেতে কিছুটা অ-পাইথোনিক "ইনডেক্সিং" ব্যবহার করে a <= n <= b
। এটির মতো কাজ করে range
এবং একটি এলোমেলো সংখ্যা তৈরি করতে পারে এমন কেউ আশা করেছিলa <= n < b
। (বদ্ধ উপরের বিরতি নোট করুন।)
সম্পর্কে মন্তব্য প্রতিক্রিয়া দেওয়া randrange
, নোট যে এই ক্লিনার দিয়ে প্রতিস্থাপিত হতে পারে random.randrange(0,10**n)
, random.randrange(10**(n-1),10**n)
এবং random.randrange(1,10)
।
a <= n <= b
আমাকেও অবাক করেছে। -1
আমার কোডে অতিরিক্ত অতিরিক্ত রাখার বিষয়ে আমি অসন্তুষ্ট হই। :-)
randint
(এটি লিবি / এলোমেলো.পি তে আছে) আসলে কেবল কল করে randrange(a, b+1)
!
আপনি যা চান তা করতে নিজেকে একটি সামান্য ফাংশন লিখতে পারেন:
import random
def randomDigits(digits):
lower = 10**(digits-1)
upper = 10**digits - 1
return random.randint(lower, upper)
মূলত, 10**(digits-1)
আপনাকে সর্বনিম্ন} ডিজিটের igit-ডিজিট নম্বর 10**digits - 1
দেয় এবং আপনাকে বৃহত্তম {ডিজিটের d -ডিজিট নম্বর দেয় (যা সবচেয়ে ক্ষুদ্রতম {ডিজিট + 1} -ডিজিট সংখ্যাটি বিয়োগ 1 হবে!)। তারপরে আমরা কেবলমাত্র এই ব্যাপ্তি থেকে একটি এলোমেলো পূর্ণসংখ্যা গ্রহণ করি।
আমি রিচিহিন্ডেলের উত্তরটি সত্যিই পছন্দ করেছি, তবে আমি অনুশীলন হিসাবে প্রশ্নটি পছন্দ করেছি। স্ট্রিংগুলি ব্যবহার করে এখানে একটি নিষ্ঠুর বল প্রয়োগ করা হচ্ছে :)
import random
first = random.randint(1,9)
first = str(first)
n = 5
nrs = [str(random.randrange(10)) for i in range(n-1)]
for i in range(len(nrs)) :
first += str(nrs[i])
print str(first)
থেকে সরকারী ডকুমেন্টেশন , তাই না বলে মনে হচ্ছে না নমুনা () মেথড এই কাজের জন্য উপযুক্ত হবে?
import random
def random_digits(n):
num = range(0, 10)
lst = random.sample(num, n)
print str(lst).strip('[]')
আউটপুট:
>>>random_digits(5)
2, 5, 1, 0, 4
আপনি এমন একটি ক্রিয়াকলাপ তৈরি করতে পারেন যিনি ইনট এর একটি তালিকা গ্রাহ্য করেন, স্ট্রিংয়ে রূপান্তর করে কনটেনেট এবং কাস্ট করতে আবার কিছু করেন:
import random
def generate_random_number(length):
return int(''.join([str(random.randint(0,10)) for _ in range(length)]))