Python Programming

Python’da Verimli Tam Sayıdan Roma Rakamına Dönüştürme

Spread the love

Bu makale, tamsayıları Roma rakamlarına dönüştürmek için iki Python yöntemini inceliyor. Doğrudan yinelemeli bir yaklaşımı ve tam sayı bölmesini kullanan daha verimli bir yöntemi inceleyeceğiz.

İçerik Tablosu

  1. Yinelemeli Yaklaşım ile Tam Sayıdan Roma Rakamına Dönüşüm
  2. Tam Sayı Bölmesi Kullanarak Verimli Dönüşüm

Yinelemeli Yaklaşım ile Tam Sayıdan Roma Rakamına Dönüşüm

Bu yöntem, Roma rakamlarını tam sayı değerlerine eşleyen bir sözlük kullanır ve Roma rakamı gösterimini oluşturmak için bu sözlük üzerinde yineleme yapar. Çıkarma gösterimi (4 için IV gibi) açıkça işlenir.


def int_to_roman_iterative(num):
    """Yineleme kullanarak bir tam sayıyı Roma rakamı gösterimine dönüştürür.

    Args:
        num: Dönüştürülecek tam sayı (1 ile 3999 arasında olmalıdır).

    Returns:
        Tam sayının Roma rakamı gösterimi veya giriş geçersizse None.
    """
    if not 1 <= num = value:
            result += symbol
            num -= value
    return result

# Örnek Kullanım
print(int_to_roman_iterative(3))   # Çıktı: III
print(int_to_roman_iterative(4))   # Çıktı: IV
print(int_to_roman_iterative(9))   # Çıktı: IX
print(int_to_roman_iterative(58))  # Çıktı: LVIII
print(int_to_roman_iterative(1994)) # Çıktı: MCMXCIV
print(int_to_roman_iterative(4000)) # Çıktı: None

Bu yaklaşım anlaşılması kolaydır, ancak while döngüsü içindeki tekrarlanan çıkarmalar nedeniyle daha büyük sayılar için daha az verimli olabilir.

Tam Sayı Bölmesi Kullanarak Verimli Dönüşüm

Bu yöntem, daha büyük tam sayıları verimli bir şekilde işlemek için tam sayı bölmesi ve modulo operatörünü kullanır. Roma rakamı eşlemesinde yalnızca bir kez yineleme yapar.


def int_to_roman_division(num):
    """Bölme kullanarak bir tam sayıyı Roma rakamı gösterimine dönüştürür.

    Args:
        num: Dönüştürülecek tam sayı (1 ile 3999 arasında olmalıdır).

    Returns:
        Tam sayının Roma rakamı gösterimi veya giriş geçersizse 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

# Örnek Kullanım
print(int_to_roman_division(3))   # Çıktı: III
print(int_to_roman_division(4))   # Çıktı: IV
print(int_to_roman_division(9))   # Çıktı: IX
print(int_to_roman_division(58))  # Çıktı: LVIII
print(int_to_roman_division(1994)) # Çıktı: MCMXCIV
print(int_to_roman_division(4000)) # Çıktı: None

Bu bölmeye dayalı yaklaşım, özellikle daha büyük giriş sayıları için, gereksiz işlemleri en aza indirerek performans artışı sağlar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir