التحدي رقم 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)