यह लेख पूर्णांकों को रोमन अंकों में बदलने के दो पायथन तरीकों का पता लगाता है। हम एक सरल पुनरावृति दृष्टिकोण और पूर्णांक विभाजन का उपयोग करने वाली अधिक कुशल विधि की जांच करेंगे।
विषयवस्तु की तालिका
पुनरावृति दृष्टिकोण पूर्णांक-से-रोमन रूपांतरण के लिए
यह विधि रोमन अंकों को उनके पूर्णांक मानों से मैप करने वाले एक शब्दकोश का उपयोग करती है और रोमन अंक निरूपण के निर्माण के लिए इसके माध्यम से पुनरावृति करती है। घटाव संकेतन (जैसे कि 4 के लिए IV) को स्पष्ट रूप से संभाला जाता है।
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
यह विभाजन-आधारित दृष्टिकोण, विशेष रूप से बड़ी इनपुट संख्याओं के लिए, अनावश्यक कार्यों को कम करके बेहतर प्रदर्शन प्रदान करता है।