القرعة العشوائية وانا

السلام عليكم
حقيقةً أشاهد الجميع يقوم بنشر مواضيع منها التقنية ومنها ماهو اخر كتحديات او استفسارات
فقررت اكتب ولعل هذا المقال او القصة القصيرة تنال اعجابكم :smiley::
في الحقيقة التقيت انا وثلاثة من زملائي في احد المناسبات :innocent: وقررنا ان نقترع لجمعية مالية نهاية كل شهر يتم جمع مبلغ مالي محدد لواحد منا وكذلك للبقية حتى يكون كل شخص منا قد استوفى حقة دفعة واحدة :money_mouth_face:
قررنا من تلك اللحظة البدأ
ولاكن كان امامنا ان نختار من الذي سيتلم الأول :point_up_2:
وبدأ كل واحد منا يشرح ماهو فية ليكون اول من يستلم المبلغ
قررنا نسوي قرعة وبدأنا ندور الاقلام والاوراق ولاكن من اين لنا اوراق واقلام ونحن في حفل عرس :man_with_turban: وجلس كل واحد يبدي رئية ويدي فكرة ، الناس معرسة تفرح وترقص واحنا جالسين نسوي قرعة بعملة معدنية " فلس وطير "
فكرة… :male_detective:
حقيقة قررت اروح اسوي برنامج قرعة بحكم انني ادرس بايثون او عندي شوية معلومات
فتحت جهازي وشغلت برنامج pycharm قلبت الأكواد وبدئت استخدم دوال ال for وال while ، ثم بدات ابحث في الأنترنت عن امثلة واكواد وبرامج مفتوحة المصدر
وجدت عدة مكاتب من بينها( math , random) هاتين المكتبتين في لغة البايثون تحتويا على "دوال تستخدم في العمليات الحسابية و الهندسية ".
اسم المكتبة او المودل التي استخدمتها في برنامج القرعة كانت مكتبة random وفيها دوال هندسية و رياضية كثيرة كنت اتمنى لو تعرفت عليها في الصف الثالث الثانوي .
اقل شي كان فعلتلي برنامج يخارجني من قوانين نيوتن والجاذبية :sweat_smile:
المهم انني بعد بحث حصلت دالة تقوم بعمل اختيار قيمة عشوائية من بين قيم نقوم بتمريرها عليها
اسم الدالة shuffle( x ) وكل ماعليك فعلة هو تمرير متغير فية قيم مخزنة مسبقاً ,
كمصفوفة مثلاً
والدالة تتولى باقي المسئلة
واليكم الكود كمثال بسيط

import  random 
#هنا قمنا باستيراد المودل 

names = ['Bassam' , 'Ibrahem' , 'Ali' , 'Sultan']
#هنا قمنا بتخزين قيم في المصفوفة لتجهيزها وتمريها الى الدالة 

random.shuffle(name)
#وهنا مرننا المصفوفة على  الدالة
 
print(names)
#وأخيراً نطبع النتيجة ومبروك عليك يامن طلعت الأول 

الأن باقي نسوي لها بعض اللمسات وحقول ادخال
وهذا ما اتمنى نسوية مع بعض .
يمكن تحتاجوة في الوقت
بالنسبة لقصتي مع اصحابي طلعت في قرعتهم الأخير :face_with_raised_eyebrow:
ولذلك حاولت اغالطهم وانسيهم موضوع الجمعية حتى قررنا نلغيها :joy: :joy:
طولت عليكم صح …
اتمنى ما اكون ازعجتكم
التحدي هنا …
من منكم يقدر يكتب كود يسوي لنا عمل هذه الدالة بدون استخدام اي مكتبة او مودل :thinking: :thinking:

14 Likes

على ما أظن صعب أن حد يعمل دالة Random، أنا قرأت من ويكيبيديا إنها عملية بتحصل بإستخدام جهاز، وليس بإستخدام Algorithm

6 Likes

ولاكن كيف لهذه الالات ان تعطينا النتيجة ونحن نشغل الاكواد هنا في اجهزتنا

3 Likes

من الرائع يا بسام أن تشاركنا شئ كهذا…
في أي لغة برمجية يمكنك بالفعل عمل برنامج صغير يحسب لك القرعة لكن مع توفر بعض الشروط، أهمها على الاطلاق هو التالي:

  • أرى أن عددكم 4 ، لذلك ينبغي مراعاة أن القرعة تحسب لكل فرد مرة كل 4 شهور.

إذا طبقت هذا الشرط بنجاح، يمكنك التلاعب بكل الدوال والأدوات التي أشرت إليها بالتأكيد!

5 Likes

اعتقادك وارد جدا،
أظن انه لا يوجد شئ strict، ممكن يكون في احتمالات

ممكن تشرحيلنا فكرة مبسطة كمثال ان Random ممكن متكونش سهلة بـAlgorithm؟

3 Likes

الفكرة جميلة، ما رأيك بتحويلها على شكل موقع؟ :grin:

5 Likes

ايش الاخبار :joy::joy:؟

4 Likes

فكرة جميلة :ok_hand: تتحول لموقع وتعد ايام مع التقويم وفى كل شهرة تختار واحد عشوائى على حسب المدة وضمان ان كل شخص له شهر :money_mouth_face:

الكلام جميل الفعل :crazy_face: تروح المستشفى :joy: بس مافي حاجة صعبة :sunglasses:

3 Likes

@BassamMsmar

اين وصلت الفكرة؟؟

ما رايك بما قاله الاخ ياسر وانتضيف عليه تعديل كاضافة مكان ليتم اقتطاع ذلك المبلغ من المشاركين و يتم ارسله لمن لديه الدور كل شهر :thinking: :thinking: :thinking:

2 Likes

السلام عليكم ورحمة الله وبركاته :wave:

حاولت في هذا الكود أن أجسد فكرة اختيار عشوائي وفقا لرقم حظ أحتفظ به ومن خلاله اسحب الإسم حسب الindex الخاص به بحيث يكون موافقا لهذا الرقم
الرقم يكون منحصر بين 0 و 9
لكن من أين آت به بحيث يكون فعلا رقم حظ؟ :thinking:

من خلال الوقت، بحيث أحتفظ برقم الآحاد الخاص بميكروثانية لحظة التنفيذ، وأخزنه وبعد ذلك أسقطه على رقم الـindex الخاص بالإسم في القائمة وأحقق عملية الإختيار العشوائي بدون إستعمال أي دالة جاهزة من مكتبة أو مودل

كما قلت الرقم يكون من حصر بين 0 و 9، لكن فرضا القائمة تتكون من 4 أسماء وقد يكون رقم الحظ 8

في هذه الحالة يجب علي أن أضمن على الأقل أن تكون القائمة تتكون عل الأقل من عشرة أسماء لذا يجب علي أن أضاعف العناصر حتى أحقق الشرط
مثلا لدي قائمة تحتوي على 4 أسماء

names = ['Bassam', 'Ibrahem', 'Ali', 'Sultan']

يجب أن تتضاعف وتصبح هكذا

names = ['Bassam', 'Ibrahem', 'Ali', 'Sultan', 'Bassam', 'Ibrahem', 'Ali', 'Sultan', 'Bassam', 'Ibrahem', 'Ali', 'Sultan']

لتصبح القائمة تحتوي على 12 وأي رقم حظ أحصل عليه أستطيع اسقاطه على الindex
بعد ما يتم اختيار الإسم احذفه من القائمة ليكون الدور للباقين
هذا ماخرجت به كفكرة خام قابلة للتحسين

from datetime import datetime
names = ['Bassam', 'Ibrahem', 'Ali', 'Sultan']


# جلب الرقم الأحادي من ميكروثانية وقت التنفيذ
def get_n_from_time():
    now = datetime.now()
    second = str(now.microsecond)
    last_digit = str(second)[-1]
    print(f'Lucky number is {last_digit}')
    return int(last_digit)


# جعل عدد العناصر في القائمة على الأقل 10
def min_ten_items(names):
    if len(names) < 10:
        while len(names) <= 10:
            names = names + names

    return names


# سحب الإسم الذي تم اختياره من القائمة
def exclude_name(name):
    for item in names:
        if item == name:
            names.remove(item)
            print(f'{item} removed from the list')


# سحب اسم من القائمة
def choose_name(names):
    while True:
        names = min_ten_items(names)
        input('Press any key to pickup the lucky one today')
        num = get_n_from_time()

        if names[num]:
            print(f'The Lucky one now is {names[num]}')
            exclude_name(names[num])
            break
        else:
            print('failed')


# تنفيذ عملية السحب
def run_the_draw(names):
    choose_name(names)

    if names:
        print(f'Next draw for {names}')
    else:
        print('Good luck for the next round!')


while len(names):
    run_the_draw(names)

ملاحظة: من فظلكم لا تضحكو علي :grin:

6 Likes

افا يالعلم
ماشفت هذ العمل الجبار الا الان لأنه كان رد في نفس المقالة وما انتبهت له
عمل اكثر من دمبل يعكس تمكن كاتبة من مداخل ومخارجه البايثون
احييك اخي @Adetech
:rose: :rose:

1 Like

استلمنا الجمعيه واصترفنا ولله الحمد هههههه

1 Like

الفكرة جميلة
ان شاء الله الى بعد المخيم Django
بنفعل الفكرة ونطلع بحاجات جبارة ان شاء الله

2 Likes

بتكون اكيد جميلة جدأ
ان شاء الله نسويها ونرفعها كتبيق

2 Likes

انشاء الله ولما لا ان يتم العمل عليه كمشرووع للمجوعة من اجل التطبيق ويتم نشره انشاء الله

كاول مساهمة من اعضاء فريق المخيم الاول وكتحفيز للاخرين من اجل الانضمام الى هذا المجتمع باذن الله.

5 Likes

جميل جداً
الافكار قابله لتوسعة والتطوير
هنالك افكار كثيرة ممكن نشتغل عليها
كعمل قرعة لمنتخب رياضي وارسال النتائج برسالة نصية للمستخدم ورسائل التذكير

2 Likes