📖 Scenario: Imagine you are building a simple tool that helps convert Roman numerals into regular numbers. This is useful in many places like reading old clocks, books, or historical dates.
🎯 Goal: You will create a program that takes a Roman numeral string and converts it into its integer value.
📋 What You'll Learn
Create a dictionary mapping Roman numeral characters to their integer values.
Create a variable to hold the total integer value.
Use a loop to process each character in the Roman numeral string.
Handle the subtraction rule where a smaller numeral before a larger numeral means subtraction.
Print the final integer value.
💡 Why This Matters
🌍 Real World
Roman numerals are used in clocks, book chapters, movie sequels, and historical dates. Converting them to integers helps computers understand and work with these numbers.
💼 Career
Understanding how to map symbols to values and apply rules is key in programming tasks like parsing, data conversion, and working with custom formats.
Progress0 / 4 steps
1
Create Roman numeral dictionary
Create a dictionary called roman_values with these exact entries: 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000.
DSA Python
Hint
Use curly braces {} to create a dictionary and add the given key-value pairs.
2
Set up input and total variable
Create a variable called roman and set it to the string 'MCMXCIV'. Then create a variable called total and set it to 0.
DSA Python
Hint
Assign the string 'MCMXCIV' to roman and number 0 to total.
3
Convert Roman numeral to integer
Use a for loop with variable i to iterate over the range from 0 to len(roman) - 1. Inside the loop, compare the value of the current Roman numeral character roman[i] with the next character roman[i + 1] using roman_values. If the current value is less than the next value, subtract it from total. Otherwise, add it to total. After the loop, add the value of the last character roman[-1] to total.
DSA Python
Hint
Use range(len(roman) - 1) to loop through all but the last character. Compare current and next values to decide whether to add or subtract.
4
Print the integer result
Write print(total) to display the final integer value of the Roman numeral.
DSA Python
Hint
Use the print function to show the value stored in total.
Practice
(1/5)
1. What is the integer value of the Roman numeral IX?
easy
A. 11
B. 19
C. 6
D. 9
Solution
Step 1: Understand Roman numeral rules for subtraction
In Roman numerals, when a smaller numeral appears before a larger one, it is subtracted. Here, I (1) is before X (10), so 1 is subtracted from 10.
Step 2: Calculate the value of IX
10 - 1 = 9.
Final Answer:
9 -> Option D
Quick Check:
IX = 9 [OK]
Hint: Subtract when smaller numeral is before larger one [OK]
Common Mistakes:
Adding values instead of subtracting
Confusing IX with XI
Ignoring subtraction rule
2. Which of the following Python code snippets correctly initializes a dictionary mapping Roman numerals to integers?
Hint: Use curly braces and quote keys for dictionaries [OK]
Common Mistakes:
Using square brackets instead of curly braces
Not quoting string keys
Using assignment '=' inside dictionary
3. What is the output of the following Python code?
def roman_to_int(s):
roman_map = {'I': 1, 'V': 5, 'X': 10}
total = 0
for i in range(len(s)):
if i + 1 < len(s) and roman_map[s[i]] < roman_map[s[i + 1]]:
total -= roman_map[s[i]]
else:
total += roman_map[s[i]]
return total
print(roman_to_int('XIV'))
medium
A. 14
B. 16
C. 9
D. 11
Solution
Step 1: Trace the loop for input 'XIV'
Characters: X(10), I(1), V(5). Loop index i from 0 to 2. i=0: X(10) < I(1)? No, add 10. i=1: I(1) < V(5)? Yes, subtract 1. i=2: V(5), no next char, add 5.
Step 2: Calculate total
Total = 10 - 1 + 5 = 14.
Final Answer:
14 -> Option A
Quick Check:
X(10) + IV(4) = 14 [OK]
Hint: Subtract if current < next numeral, else add [OK]
Common Mistakes:
Adding all values without subtraction
Off-by-one errors in loop
Ignoring last character addition
4. The following code is intended to convert a Roman numeral string to an integer. What is the error?
def roman_to_int(s):
roman_map = {'I': 1, 'V': 5, 'X': 10}
total = 0
for i in range(len(s)):
if roman_map[s[i]] < roman_map[s[i + 1]]:
total -= roman_map[s[i]]
else:
total += roman_map[s[i]]
return total
print(roman_to_int('IX'))
medium
A. SyntaxError due to missing colon
B. KeyError because 'IX' is not in roman_map
C. IndexError due to accessing s[i + 1] without boundary check
D. Returns incorrect value 11 instead of 9
Solution
Step 1: Identify loop and index usage
The loop runs from i=0 to len(s)-1. At last index i, accessing s[i+1] causes IndexError.
Step 2: Explain why error occurs
For input 'IX' (length 2), when i=1, s[i+1] is s[2], which is out of range.
Final Answer:
IndexError due to accessing s[i + 1] without boundary check -> Option C
Quick Check:
Check index bounds before s[i+1] access [OK]
Hint: Always check index before accessing s[i+1] [OK]
Common Mistakes:
Not checking index bounds in loops
Assuming s[i+1] always exists
Ignoring runtime errors
5. Given the Roman numeral string 'MCMXCIV', what integer does the following code return?
def roman_to_int(s):
roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
total = 0
prev_value = 0
for char in reversed(s):
value = roman_map[char]
if value < prev_value:
total -= value
else:
total += value
prev_value = value
return total
print(roman_to_int('MCMXCIV'))
hard
A. 1494
B. 1994
C. 1949
D. 2094
Solution
Step 1: Understand reversed traversal and subtraction logic
The code processes characters from right to left, subtracting if current value is less than previous.