পাইথনে নির্দিষ্ট দৈর্ঘ্যের সাথে এলোমেলো সংখ্যা কীভাবে তৈরি করা যায়


105

ধরা যাক আমার একটি 3 ডিজিটের নম্বর দরকার, তাই এটি এমন কিছু হবে:

>>> random(3)
563

or

>>> random(5)
26748
>> random(2)
56

উত্তর:


182

এলোমেলো 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

7
এই সমাধানের সাহায্যে আপনি আপনার এলোমেলো পুল থেকে 10 ** (n-1) নম্বরগুলি সরিয়ে
ফেলবেন

5
@ নিকোলাইসুর্দু: হ্যাঁ, তাই আমি বলেছিলাম যে আপনি "তিন অঙ্ক পর্যন্ত" না হয়ে তিনটি অঙ্কের সত্যই সত্যই ধরে
রিচিহিন্দল

3
037 এটি একটি 3 ডিজিটের সংখ্যা, 100 এর চেয়ে কম :)। যে আমি বোঝানো কি. তবে হ্যাঁ,
লটারিবিহীন

@ নিকোলাইসুর্দু এই স্নিপেটটি আপনাকে 037 এর ফলাফল কীভাবে দিতে পারে ??? এটির (100 থেকে 1000) কোনও র‌্যান্ডিন্ট যদি এন == 3
মোল্ডোভেন

3
@ মলডোভান উপরে থেকে পড়ুন :)। আমি বোঝাতে চেয়েছিলাম যে আমি সেই সংখ্যাটি চেয়েছিলাম এবং এই সমাধানটি আপনাকে সেই সংখ্যাটির সংখ্যা পর্যন্ত দেয় না ঠিক অঙ্কের চেয়ে that এটি আমার খারাপ ছিল, আমি প্রথম বন্ধনীতে অনুচ্ছেদটি মিস করেছি।
নিকু সুরডু

41

যদি আপনি এটি স্ট্রিং হিসাবে চান (উদাহরণস্বরূপ, একটি 10-সংখ্যার ফোন নম্বর) আপনি এটি ব্যবহার করতে পারেন:

n = 10
''.join(["{}".format(randint(0, 9)) for num in range(0, n)])

'রেঞ্জের (এন) এর জন্য' '.জাইন (স্ট্র্যান্ড (0, 9))
মাইক ফোগেল

13

আপনার যদি একটি 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}'

উপরের উদাহরণগুলি হ'ল:

  • '026'
  • '255'
  • '512'

একটি ফাংশন হিসাবে প্রয়োগ করা:

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_}}'

5

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আমার কোডে অতিরিক্ত অতিরিক্ত রাখার বিষয়ে আমি অসন্তুষ্ট হই। :-)
রিচিহাইন্ডল

1
@ অ্যান্ড্রু - মজাদারভাবে যথেষ্ট, পাইথন কোডটির জন্য randint(এটি লিবি / এলোমেলো.পি তে আছে) আসলে কেবল কল করে randrange(a, b+1)!
ড্যানিয়েল জি

4

আপনি যা চান তা করতে নিজেকে একটি সামান্য ফাংশন লিখতে পারেন:

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 হবে!)। তারপরে আমরা কেবলমাত্র এই ব্যাপ্তি থেকে একটি এলোমেলো পূর্ণসংখ্যা গ্রহণ করি।


0

আমি রিচিহিন্ডেলের উত্তরটি সত্যিই পছন্দ করেছি, তবে আমি অনুশীলন হিসাবে প্রশ্নটি পছন্দ করেছি। স্ট্রিংগুলি ব্যবহার করে এখানে একটি নিষ্ঠুর বল প্রয়োগ করা হচ্ছে :)

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)

0

থেকে সরকারী ডকুমেন্টেশন , তাই না বলে মনে হচ্ছে না নমুনা () মেথড এই কাজের জন্য উপযুক্ত হবে?

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

0

আপনি এমন একটি ক্রিয়াকলাপ তৈরি করতে পারেন যিনি ইনট এর একটি তালিকা গ্রাহ্য করেন, স্ট্রিংয়ে রূপান্তর করে কনটেনেট এবং কাস্ট করতে আবার কিছু করেন:

import random

def generate_random_number(length):
    return int(''.join([str(random.randint(0,10)) for _ in range(length)]))

এটি একটি নির্দিষ্ট দৈর্ঘ্যের সংখ্যার উত্পন্ন নয় :(
প্রমিথিউস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.