Python Programming

تحويل الأعداد الصحيحة إلى أرقام رومانية بكفاءة في بايثون

Spread the love

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

محتويات الجدول

  1. النهج التكراري للتحويل من عدد صحيح إلى روماني
  2. التحويل الفعال باستخدام القسمة الصحيحة

النهج التكراري للتحويل من عدد صحيح إلى روماني

تستخدم هذه الطريقة قاموسًا يُطابق الأرقام الرومانية بقيمها الصحيحة، وتكرر من خلاله لبناء التمثيل الروماني للعدد. يتم التعامل مع الترميز الطرحي (مثل IV لـ 4) بشكل صريح.


def int_to_roman_iterative(num):
    """يحول عددًا صحيحًا إلى تمثيله بالرقم الروماني باستخدام التكرار.

    Args:
        num: العدد الصحيح المراد تحويله (يجب أن يكون بين 1 و 3999 شاملاً).

    Returns:
        التمثيل الروماني للعدد الصحيح، أو None إذا كانت الإدخال غير صالح.
    """
    if not 1 <= num = value:
            result += symbol
            num -= value
    return result

# مثال على الاستخدام
print(int_to_roman_iterative(3))   # المخرجات: III
print(int_to_roman_iterative(4))   # المخرجات: IV
print(int_to_roman_iterative(9))   # المخرجات: IX
print(int_to_roman_iterative(58))  # المخرجات: LVIII
print(int_to_roman_iterative(1994)) # المخرجات: MCMXCIV
print(int_to_roman_iterative(4000)) # المخرجات: None

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

التحويل الفعال باستخدام القسمة الصحيحة

تستخدم هذه الطريقة القسمة الصحيحة وعامل المعامل لإدارة الأعداد الصحيحة الكبيرة بكفاءة. إنها تتكرر عبر تعيين الأرقام الرومانية مرة واحدة فقط.


def int_to_roman_division(num):
    """يحول عددًا صحيحًا إلى تمثيله بالرقم الروماني باستخدام القسمة.

    Args:
        num: العدد الصحيح المراد تحويله (يجب أن يكون بين 1 و 3999 شاملاً).

    Returns:
        التمثيل الروماني للعدد الصحيح، أو None إذا كانت الإدخال غير صالح.
    """
    if not 1 <= num <= 3999:
        return None

    roman_map = { 1000: 'M', 900: 'CM', 500: 'D', 400: 'CD', 100: 'C', 90: 'XC',
                  50: 'L', 40: 'XL', 10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'}

    result = ""
    for value, symbol in roman_map.items():
        result += symbol * (num // value)
        num %= value
    return result

# مثال على الاستخدام
print(int_to_roman_division(3))   # المخرجات: III
print(int_to_roman_division(4))   # المخرجات: IV
print(int_to_roman_division(9))   # المخرجات: IX
print(int_to_roman_division(58))  # المخرجات: LVIII
print(int_to_roman_division(1994)) # المخرجات: MCMXCIV
print(int_to_roman_division(4000)) # المخرجات: None

يقدم نهج القسمة هذا أداءً محسّنًا، خاصةً بالنسبة لأعداد الإدخال الكبيرة، من خلال تقليل العمليات الزائدة.

اترك تعليقاً

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