سلسلة حل المشكلات (Problem Sloving) اليوم التمنتاشر

التحدي رقم 18 لليوم رقم 18 من رمضان

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

وصف التحدي :

متنساش تدعي لخواتنا ف غزه لو لسه عندك قلب و شوية دم

**مستوي التحدي : **
متوسط برمجيا

قم بكتابة دالة اسمها: convert_number_format التي تستقبل متغير من نوع string يحتوي على رقم إما بنظام العد الست عشري (hexadecimal) أو النظام العشري (decimal). الدالة يجب أن تقوم بتحديد نوع الرقم (هل هو عشري أم ست عشري) ثم تعكس تنسيقه. إذا كان الرقم بنظام العد الست عشري، تقوم بتحويله إلى نظام العد العشري، وإذا كان الرقم بنظام العد العشري، تقوم بتحويله إلى نظام العد الست عشري وتقوم الداله بارجاع القيمه المعكوسة.

ملحوظه : تقدر تحل التحدي و تتحقق من صحته من خلال الموقع هنا اهو :
موقع سلسلة حل المشكلات (Problem Sloving)
بس خد بالك لو هتحل ع الموقع لازم اسم الداله يكون زي الاسم اللي موجود في وصف التحدي

أضغط لرؤية المخرجات المتوقعة عشان تتيست الكود بتاعك

الاختبار 1
المدخلات (Inputs):
number = ‘255’
المخرجات (Outputs):
‘ff’

الاختبار 2
المدخلات (Inputs):
number = ‘a1’
المخرجات (Outputs):
‘161’

الاختبار 3
المدخلات (Inputs):
number = ‘1000’
المخرجات (Outputs):
‘3e8’

الاختبار 4
المدخلات (Inputs):
number = ‘3f’
المخرجات (Outputs):
‘63’

حل التحدي بتمييزات بايثون

def convert_number_format(number):

    if number.isdigit():
        return hex(int(number))[2:]
    
    else:
        return str(int(number, 16))
حل التحدي برمجيا بدون استخدام تمييزات بايثون مع الشرح طبعا

def convert_number_format(number):
    # هنتأكد إذا كان الرقم ده عشري (يعني مكون من أرقام بس من 0 لحد 9)
    is_decimal = True
    for c in number:
        if c not in '0123456789':
            is_decimal = False
            break

    # لو الرقم عشري (مش هيبقى فيه أي حرف من a لحد f)
    if is_decimal:
        # هنحول الرقم من عشري ل ست عشري
        decimal_number = int(number)
        hex_chars = '0123456789abcdef'
        
        # لو الرقم هو صفر، هنرجع 0
        if decimal_number == 0:
            return '0'
        
        hex_result = ''
        while decimal_number > 0:
            remainder = decimal_number % 16
            hex_result = hex_chars[remainder] + hex_result
            decimal_number //= 16
        
        return hex_result
    else:
        # هنحول الرقم من ست عشري لعشري
        hex_chars = '0123456789abcdef'
        decimal_result = 0
        number = number.lower()  # علشان نقدر نعامل الحروف الصغيرة في الست عشري
        
        # هانحسب القيمة العشرية باستخدام القيم اللي في hex_chars
        power = 0
        # بدل ما نستخدم sorted() او `reversed()` لان الاتنين موجودين في بايثون بس, هنستخدم حلقة تقليدية عشان نعكس الرقم
        for i in range(len(number) - 1, -1, -1):
            char = number[i]
            index = hex_chars.index(char)
            decimal_result += index * (16 ** power)
            power += 1
        
        return str(decimal_result)

3 إعجابات

الحمدلله التحدي كان سهل مع اني مكنتش عارف عن الـhex، بس بايثون مسهله الدنيا. الحل :

def convert_hex(number): return format(int(number), 'x') if number.isdigit() else str(int(number, 16))
إعجاب واحد (1)

في الحل بتاعك اللي فيه تسهيلات بايثون كان ممكن بدل سطر :

if all(c in '0123456789' for c in number):

تستعمل .isdigit () :

if number.isdigit ()

عشان كده اسهل (بما ان الكود بالتسهيلات)

إعجابَين (2)

إعجابَين (2)

سؤال هل حد يعرف ازاي علي vsc اتحكم في طول سطور الكود بحيث أن السطر ميكونش طويل اوي بمعني مثلا في الحل بتاعي السطر بتاع ال if انا كنت حابة اخليه علي 3سطور بدل سطرين حد عنده فكرا ازاي و علي فكرة أنا ضغطت alt+z علشان يكون في سطرين

إعجابَين (2)

اه مهو alt + z بخليه Word Wrap اللي هو يعني يبقي مناسب للرؤيه بدون استخدام البتاعه اللي بتحود الشاشه دي و اظن دا حل الللي انت طلبته حسب ما فهمت , و مش بيعدل الكود يعني الكود بيقضل زي ما هو

3 إعجابات

اه مخدش بالي , الحاجات دي انا حاللها من زمان فا بنسخ اللي انا حاله و احطه , ساعتها كنت لسه بتعلم معني ال all لذلك استخدمتها تقريبا مش متذكر قوي ولكن الحل بتاع كل اللغات دا قعدت عملته امبارح عشان انتو مكنتوش فاهمين اوي النظام فحبيت يكون شرح طريقه التحويل مفسره عشان نستفيد منه يعني

3 إعجابات

الكود صح بس حاول تراجع الحل عشان تحسن من طريقة كتابة الكود و طريقة الحل يعني دا مينعش انه كود صح يعني

3 إعجابات

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

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

إعجابَين (2)

اه واخد بالي معلش لو بكلمك بصيغه الولد بس عشان بكتب من الكومبيوتر و الحروف العربيه بعيده بسبب انها كتبيره فا كف ايدي بيخدل بسرعه فا دايما بكتب الكلام بالصيغه الاصغر اللي هو المذكر يعني , ان شاء الله فيما بعد ابقا احطلك حرف الياء :sweat_smile:

3 إعجابات

ولا يهم حضرتك اصل فيه كتير من الناس خاصة اللي مش شايفيني بيعتقدوا اني ولد اسمه مينا فحبيت أوضح بس لكن حضرتك اكتب بالصيغة اللي تريحك كفاية المشاكل الجميلة اللي بتنزلها

إعجابَين (2)