كيفية توليد أرقام عشوائية في بايثون

في بعض الأحيان تحتاج إلى رقم أو عنصر عشوائي. كيف يمكن لبايثون المساعدة؟

في هذه المقالة، سنناقش العشوائية الزائفة، و كيف تختلف عن العشوائية الحقيقية، وكيف يمكن تطبيقها في بايثون لإنشاء أرقام عشوائية. سنتعمق أيضًا في بعض المواضيع الأكثر تقدمًا، مثل الكود القابل للتكرار بأرقام عشوائية و استخدام دوال choice() وchoices() لإرجاع عناصر سلسلة عشوائية من القائمة. و أخيرًا، سنوضح لك كيفية ترتيب القائمة بشكل عشوائي.

ما هي الأرقام العشوائية الزائفة؟

الأرقام العشوائية الزائفة

يقوم مولد الأرقام العشوائية الزائفة بإنشاء “عشوائية” بمساعدة خوارزمية رياضية. وهذا يعني أنه يتم إجراء اختيار عشوائي باستخدام برنامج كمبيوتر. بالنسبة للبشر، هذا له تأثير العشوائية: النتيجة تبدو اعتباطية تمامًا. يعد المولد العشوائي الزائف بنفس جودة المولد العشوائي الحقيقي (الذي يستخدم وسيلة فيزيائية غير متوقعة لتوليد أرقام عشوائية).

لأغراض هذه المقالة، عندما نتحدث عن العشوائية التي تنتجها بايثون، فإننا نتحدث في الواقع عن العشوائية الزائفة. ومن المهم أن نذكر أننا لن نستخدم مولدًا عشوائيًا حقيقيًا، ولكن العشوائية الزائفة جيدة بما يكفي لمعظم احتياجات عالم الأعمال الحالية.

توليد أرقام عشوائية زائفة باستخدام وحدة random

إحدى أشهر وحدات Python لإنشاء اختيارات عشوائية هي RANDOM. دعونا نلقي نظرة على الدوال الأكثر شهرة في هذه المكتبة.

اختيار عدد صحيح عشوائي

تخيل أنك تعمل في مجال المبيعات ولديك 10 عملاء. تريد اختيار أحد هؤلاء العملاء بشكل عشوائي للحصول على عرض خاص. يمكنك إجراء اختيار عشوائي في بايثون باستخدام الدالة randint().

لقد قمت بإنشاء مثال؟ – يتم تخزين 10 عملاء في إطار بيانات Pandas. كل عميل لديه معرف و اسم. تتراوح أرقام المعرفات من 0 إلى 10 و تحدد كل عميل بشكل فريد.

import pandas as pd
clients = pd.DataFrame()
clients['client_id'] = [0,1,2,3,4,5,6,7,8,9]
clients['client_name'] = ["Mobili Ltd.","Tymy Ltd.", "Lukas Ltd.","Brod Ltd.",
"Missyda Ltd.", "Abiti Ltd.", "Bomy Ltd." , "Citiwi Ltd.", "Dolphy Ltd.", "Doper Ltd."]

الآن يطرح السؤال: كيف يمكننا استخدام randint() لاختيار عميل واحد من إطار البيانات؟ بسهولة:

import random
random_number = random.randint(0,9)
clients.loc[clients['client_id'] == random_number]

في الكود أعلاه، يتم استدعاء randint() باستخدام وسيطتين: رقم البداية (وهو في هذه الحالة هو 0) ورقم النهاية (وهو 9). من خلال استدعاء randint()‎ مع الوسيطتين 0 و 9، فإننا نطلب من بايثون إرجاع رقم صحيح عشوائي من 0,1,2,3,4,5,6,7,8, 9. [‘client_id’]== Random_number] يُرجع معرف العميل المحدد عشوائيًا والاسم المرتبط به:

حاول تكرار هذه العملية عدة مرات. لن تحصل دائمًا على نفس العميل لأنه يتم اختيار المعرف عشوائيًا بواسطة وحدة random.

و لكن ماذا لو كنت تريد جعل التعليمات البرمجية قابلة للتكرار؟ ربما يريد رئيسك في العمل أن يعرف كيف تم اختيار شركة Bomy Ltd. و ربما يريد تشغيل الكود و الحصول على نفس النتائج مرة أخرى. هذا ممكن لأن وحدة random تولد أرقامًا شبه عشوائية، و ليست أرقامًا عشوائية حقيقية. يمكن تحديد الأرقام التي يتم إنشاؤها بشكل عشوائي في بايثون. (هناك صيغة رياضية وراء الاختيار). يمكننا استخدام الدالة Seed() إذا أردنا الحصول على نتائج قابلة للتكرار.

الكود القابل للتكرار باستخدام وظيفة seed()

يتم استخدام دالة Seed() لحفظ حالة دالة Random()، مما يسمح لها بإنشاء نفس الرقم (الأرقام) العشوائية عند عمليات تنفيذ متعددة للتعليمات البرمجية على نفس الأجهزة أو أجهزة مختلفة لقيمة أولية محددة. إن تمرير نفس البذرة إلى Random() ثم استدعاء هذه الوظيفة سيعطيك دائمًا نفس مجموعة الأرقام.

إذا وضعنا Rand.seed(0) في بداية الكود في المثال أعلاه، فإن استدعاء randint(0,9) سيؤدي دائمًا إلى الحصول على نفس النتيجة:

import random
 
random.seed(0)
random.randint(0,9)

استخدام Seed()‎ يجعل التعليمات البرمجية الخاصة بك قابلة للتكرار؛ كل تنفيذ سوف يؤدي إلى نفس النتيجة.

استخدام choice() لإرجاع عنصر عشوائي من القائمة

في وقت سابق، قدمنا مثالاً لبائع يحتاج إلى اختيار أحد عملائه من القائمة. تم تمثيل كل عميل بعدد صحيح من 0 إلى 10. بدلاً من استخدام randint() لتحديد عدد صحيح عشوائي، يمكن لبائعنا فقط استخدام وظيفة Choice()، مثل هذا:

import random

import pandas as pd

clients = pd.DataFrame()

clients['client_id'= [0,1,2,3,4,5,6,7,8,9]

clients['client_name'= ["Mobili Ltd.","Tymy Ltd.""Lukas Ltd.","Brod Ltd.",

                          "Missyda Ltd.""Abiti Ltd.""Bomy Ltd." "Citiwi Ltd.""Dolphy Ltd.""Doper Ltd."]

clients.loc[clients['client_id'== random.choice(clients['client_id'])]

في الكود أعلاه، يقوم Random.choice(clients['client_id']) باختيار رقم من القائمة [0,1,2,3,4,5,6,7,8,9]. يسترد السطر Clients.loc[clients['client_id'] == Random.choice(clients['client_id'])] اسم العميل والمعرف الذي تم اختياره عشوائيًا باستخدام Random.choice(['clients_id']). هذه طريقة أنيقة جدًا لاسترداد عنصر عشوائي.

من المهم أيضًا الإشارة إلى أن choice() يعمل أيضًا مع قائمة السلاسل. يمكن لبائعنا أيضًا تشغيل Random.choice(clients['client_name']) وسيتم إرجاع اسم عشوائي مباشرةً في الإخراج. بدلًا من اختيار عدد صحيح عشوائي، سيقوم choice() بإجراء انتقاء سلسلة عشوائي.

في بعض الأحيان قد ترغب في اختيار عدة عناصر من القائمة. يمكن القيام بذلك باستخدام دالة choices() (لاحظ حرف ‘s’). يمكننا اختيار عميلين بشكل عشوائي من القائمة باستخدام Random.choices(clients['client_name'],k=2). يتم استخدام الوسيطة k لتحديد عدد العناصر التي نريد تحديدها عشوائيًا.

سيُرجع الكود أعلاه اسمين تم اختيارهما عشوائيًا – فقط ضع في اعتبارك أنه إذا كنت تريد أن تجعل الكود الخاص بك قابلاً للتكرار، فيجب عليك استخدام دالة Seed(). (وإلا، فستحصل دائمًا على أسماء مختلفة.)

import random
import pandas as pd
clients = pd.DataFrame()
clients['client_id'] = [0,1,2,3,4,5,6,7,8,9]
clients['client_name'] = ["Mobili Ltd.","Tymy Ltd.", "Lukas Ltd.","Brod Ltd.",
                          "Missyda Ltd.", "Abiti Ltd.", "Bomy Ltd." , "Citiwi Ltd.", "Dolphy Ltd.", "Doper Ltd."]
 
random.choices(clients['client_name'],k=2)

إعادة ترتيب القائمة بشكل عشوائي باستخدام shuffle()

الدالة الأخيرة التي سنذكرها هي shuffle(). يمكنك استخدام هذه الدالة عندما تحتاج إلى إرجاع كافة العناصر من القائمة ولكن بترتيب مختلف. ربما يريد مندوب المبيعات لدينا خلط قائمة العملاء واستخدام القائمة المُعاد ترتيبها لإجراء مكالمات المبيعات. تبدو قائمة معرفات العميل كما يلي: [0,1,2,3,4,5,6,7,8,9]. ويمكن إعادة ترتيبه باستخدام Random.shuffle(client_id). بعد تنفيذ هذا السطر من التعليمات البرمجية، سيبدو المتغير Client_id شيئًا مثل [0, 4, 3, 2, 8, 9, 1, 6, 7, 5]. لقد قمنا بخلط القائمة بشكل عشوائي. الآن يمكن لبائعنا إجراء المكالمات من خلال عملية إعادة الطلب العشوائية هذه.

shuffle-code

بالطبع، يمكننا بالمثل إعادة ترتيب قائمة السلاسل باستخدام shuffle(). إذا كان لدينا أسماء مخزنة في القائمة، مثل:

client_name(['Mobili Ltd.', 'Tymy Ltd.', 'Lukas Ltd.', 'Brod Ltd.', 'Missyda Ltd.', 'Abiti Ltd.', 'Bomy Ltd.', 'Citiwi Ltd.', 'Dolphy Ltd.', 'Doper Ltd.'])

يمكننا إعادة ترتيب هذه القائمة عن طريق تشغيل Random.shuffle(client_name). حيث تقوم بإرجاع قائمة مختلطة.

import random
client_name= ["Mobili Ltd.","Tymy Ltd.", "Lukas Ltd.","Brod Ltd.", "Missyda Ltd.", "Abiti Ltd.", "Bomy Ltd." , "Citiwi Ltd.", "Dolphy Ltd.", "Doper Ltd."]
random.shuffle(client_name)
client_name

بعد استدعاء Random.shuffle()، تم إعادة ترتيب القائمة. و ستبدو هكذا:

['Abiti Ltd.', 'Citiwi Ltd.', 'Dolphy Ltd.', 'Tymy Ltd.', 'Doper Ltd.', 'Missyda Ltd.', 'Mobili Ltd.', 'Lukas Ltd.', 'Brod Ltd.', 'Bomy Ltd.']

الأرقام العشوائية في لغة بايثون أسهل مما تعتقد

إحدى وحدات بايثون الأكثر شيوعًا تجعل من السهل إنشاء أرقام عشوائية زائفة. تتضمن بعض الدوال الأكثر استخدامًا من وحدة random تلك التي تتعامل مع اختيار عدد صحيح عشوائي (randint())، ورقم عائم عشوائي (random()، و uniform())، واختيار عنصر قائمة عشوائي (choice()Choice()) وإعادة ترتيب القائمة العشوائية (shuffle()). أوضحت لك هذه المقالة كيفية استخدام هذه الدوال وكيفية تنفيذ العشوائية في التعليمات البرمجية الخاصة بك. تذكر، عند استخدام Seed()، يمكن إعادة إنتاج هذه النتائج العشوائية الزائفة في التعليمات البرمجية الخاصة بك – وهي طريقة سهلة جدًا لوضع أرقام عشوائية في Python للعمل!

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading

Scroll to Top