"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تمارين المنطق والبرمجة (الحلول): النهج والتحسين

تمارين المنطق والبرمجة (الحلول): النهج والتحسين

تم النشر بتاريخ 2024-08-22
تصفح:489

Ejercicios de logica y programacion (oluciones): Enfoques y Optimización

بالنظر إلى هذا التمرين: (من موقع codewars.com)

قم بإنشاء دالة تقوم بإرجاع مربع كل رقم من الرقم.

على سبيل المثال، عند إدخال الدالة، يجب أن يُرجع الرقم 702 4904، بما أن مربع 7 هو 49، فإن مربع 0 هو ]0 ومربع 2 هو 4. إذا تلقت الدالة صفرًا فيجب أن تُرجع 0.

التحدي الأساسي لهذا التمرين هو المرور عبر عدد صحيح تلو الآخر وإرجاع النتيجة كعدد صحيح آخر.

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

def square_digits(num):
    if num == 0:
        return 0
    result = ""
    while num > 0:
        num_sqr = (num % 10) ** 2 
        num = num // 10
        result = str(num_sqr)   result 
    return int(result)

في هذا الكود، نقوم أولاً بتقييم ما إذا تم استلام 0 لإرجاع 0، كما هو موضح في العبارة. بعد ذلك، نقوم بتهيئة نتيجة المتغير كسلسلة فارغة، وإنشاء حلقة while مع الشرط num > 0. ونحدد المتغير num_sqr، وهو مربع كل رقم تم استلامه. باستخدام الرقم % 10 نحصل على الرقم الأخير من الرقم المستلم ثم نقوم بتربيعه بـ **2.

  • يعد استخدام num % 10 طريقة شائعة لاستخراج الرقم الأخير من الرقم.

  • التعبير num = num // 10 يزيل الرقم الأخير من الرقم، ويتقدم للأمام خلال كل رقم.

هناك طريقة أخرى لحلها وهي تحويل الرقم إلى سلسلة والتكرار خلال هذه السلسلة باستخدام حلقة for:

def square_digits(num):
    result = ""
    for digit in str(num):
        result  = str(int(digit)**2)
    return int(result)

هذا الكود هو الأمثل، فهو يحتوي على عدد أقل من الأسطر والاجتياز مفهوم جيدًا، وليس من الضروري تقييم ما إذا كان يتلقى 0. في بايثون، من الممكن اجتياز حرف سلسلة بحرف باستخدام حلقة for . نستخدم هذه الوظيفة للتنقل عبر الرقم المستلم، وتحويله باستخدام str(num) إلى سلسلة. نقوم بإنشاء النتيجة المتغيرة كسلسلة فارغة، والتي سيتم ربط الحرف بها، وهو نتيجة تحويل الرقم إلى عدد صحيح ورفعه إلى 2، وكلها يتم تحويلها إلى سلسلة. ثم نعيد النتيجة المحولة إلى عدد صحيح.

  • قد يكون تسلسل السلاسل داخل الحلقة أقل كفاءة في الأداء بالنسبة للأعداد الكبيرة جدًا، ولكنه مقبول تمامًا لمعظم حالات الاستخدام.

*طريقة أكثر تقدمًا و"أناقة" * تستخدم فهم المولدات و.join motodo. أقدم لك الكود أولاً وسنقوم بتفصيله وشرح هذه الشروط.

def square_digits(num):
    return int(''.join(str(int(digit)**2) for digit in str(num)))

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

التعبير str(int(digit)**2) للرقم في str(num) هو _generator _(Generator Expression) الذي يتكرر على كل رقم في تمثيل السلسلة للرقم num.
بالنسبة لكل رقم، فإنه يحوله إلى عدد صحيح (int(digit))، ويربعه (**2)، ثم يحوله مرة أخرى إلى سلسلة (str(...)). بعد ذلك، باستخدام ''.join(...)، يمكنك أخذ تسلسل (في هذه الحالة، المولد) وتسلسل جميع العناصر في سلسلة واحدة. هنا، يتم دمج كافة الأرقام المربعة في سلسلة واحدة دون أي فاصل (لأن السلسلة بين علامتي الاقتباس المفردتين فارغة '').

كما نرى، فإن الطرق المختلفة لحل التمرين توضح مستويات المعرفة في اللغة. جميع الحلول صحيحة إذا نجحت في الاختبارات، ولكن بعضها أكثر كفاءة وقابلية للقراءة من غيرها. يعتمد اختيار النهج على السياق وما يتم تحديده حسب الأولوية في كل حالة:

  • سهولة القراءة : يعد ذلك أمرًا بالغ الأهمية عندما يقوم المطورون الآخرون بقراءة التعليمات البرمجية الخاصة بك والحفاظ عليها. إن التعليمات البرمجية الواضحة وسهلة الفهم تقلل من فرص حدوث الأخطاء وتسهل صيانتها. ?

  • الكفاءة : مهمة عند العمل بكميات كبيرة من البيانات أو في التطبيقات التي يكون فيها الأداء أمرًا بالغ الأهمية. المزيد من التعليمات البرمجية المحسنة يمكن أن تحدث فرقًا كبيرًا في السرعة واستهلاك الموارد. ?

  • البساطة: للحالات التي تكون فيها الأولوية لحل المشكلة بسرعة وبشكل مباشر، كما هو الحال في النماذج الأولية أو التمارين التعليمية. غالبًا ما تجعل البساطة تصحيح أخطاء التعليمات البرمجية واختبارها أسهل. ?

عند التطوير، من المهم إيجاد توازن بين هذه الاعتبارات، وتكييف الحل مع الاحتياجات المحددة للمشروع أو المهمة.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/jpinodev/ejercicios-de-logica-y-programacion-enfoques-y-optimizacion-aka?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3