Bird
Raised Fist0
DSA Pythonprogramming~10 mins

Roman to Integer Conversion in DSA Python - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to initialize the result variable to zero.

DSA Python
def roman_to_int(s):
    result = [1]
    return result
Drag options to blanks, or click blank then click option'
A0
B1
CNone
D''
Attempts:
3 left
💡 Hint
Common Mistakes
Initializing result with 1 instead of 0
Using an empty string instead of a number
2fill in blank
medium

Complete the code to get the integer value for the current Roman numeral character.

DSA Python
def roman_to_int(s):
    roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    result = 0
    for i in range(len(s)):
        value = roman_map[[1]]
    return result
Drag options to blanks, or click blank then click option'
Ai
Bs[i]
Cs
Droman_map[i]
Attempts:
3 left
💡 Hint
Common Mistakes
Using i instead of s[i]
Trying to use roman_map[i] which is invalid
3fill in blank
hard

Fix the error in the condition to check if the current value is less than the next value.

DSA Python
def roman_to_int(s):
    roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    result = 0
    for i in range(len(s)):
        value = roman_map[s[i]]
        if i + 1 < len(s) and value [1] roman_map[s[i + 1]]:
            result -= value
        else:
            result += value
    return result
Drag options to blanks, or click blank then click option'
A>
B!=
C==
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using '>' instead of '<'
Using '==' or '!=' which are incorrect here
4fill in blank
hard

Fill both blanks to complete the loop and return statement correctly.

DSA Python
def roman_to_int(s):
    roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    result = 0
    for [1] in range(len(s)):
        value = roman_map[s[i]]
        if i + 1 < len(s) and value < roman_map[s[i + 1]]:
            result -= value
        else:
            result += value
    return [2]
Drag options to blanks, or click blank then click option'
Ai
Bs
Cresult
Dvalue
Attempts:
3 left
💡 Hint
Common Mistakes
Using 's' as loop variable instead of 'i'
Returning 'value' or 's' instead of 'result'
5fill in blank
hard

Fill both blanks to create a dictionary comprehension that maps Roman numerals to their integer values for given keys and values.

DSA Python
keys = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
values = [1, 5, 10, 50, 100, 500, 1000]
roman_map = { [2] : [1] for [3] in zip(keys, values)}
Drag options to blanks, or click blank then click option'
A{
Bv
Ck
D}
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'k' for values or 'v' for keys
Not starting with '{' for dictionary comprehension

Practice

(1/5)
1. What is the integer value of the Roman numeral IX?
easy
A. 11
B. 19
C. 6
D. 9

Solution

  1. 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.
  2. Step 2: Calculate the value of IX

    10 - 1 = 9.
  3. Final Answer:

    9 -> Option D
  4. 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?
easy
A. roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50}
B. roman_map = ['I': 1, 'V': 5, 'X': 10, 'L': 50]
C. roman_map = ('I' = 1, 'V' = 5, 'X' = 10, 'L' = 50)
D. roman_map = {I: 1, V: 5, X: 10, L: 50}

Solution

  1. Step 1: Identify correct dictionary syntax in Python

    Python dictionaries use curly braces with key:value pairs, keys as strings must be quoted.
  2. Step 2: Check each option

    roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50} uses correct syntax with quotes and curly braces. Options A, B, and D use invalid syntax. roman_map = {I: 1, V: 5, X: 10, L: 50} uses unquoted keys which causes NameError.
  3. Final Answer:

    roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50} -> Option A
  4. Quick Check:

    Correct dictionary syntax = roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50} [OK]
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

  1. 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.
  2. Step 2: Calculate total

    Total = 10 - 1 + 5 = 14.
  3. Final Answer:

    14 -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    IndexError due to accessing s[i + 1] without boundary check -> Option C
  4. 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

  1. Step 1: Understand reversed traversal and subtraction logic

    The code processes characters from right to left, subtracting if current value is less than previous.
  2. Step 2: Trace values for 'MCMXCIV'

    Characters reversed: V(5), I(1), C(100), X(10), M(1000), C(100), M(1000)
    Calculate total:
    V=5 (add 5)
    I=1 < 5 subtract 1 (total=4)
    C=100 > 1 add 100 (total=104)
    X=10 < 100 subtract 10 (total=94)
    M=1000 > 10 add 1000 (total=1094)
    C=100 < 1000 subtract 100 (total=994)
    M=1000 > 100 add 1000 (total=1994)
  3. Final Answer:

    1994 -> Option B
  4. Quick Check:

    MCMXCIV = 1994 [OK]
Hint: Traverse right to left, subtract if smaller than previous [OK]
Common Mistakes:
  • Processing left to right without subtraction logic
  • Confusing numeral values
  • Missing reversed traversal step
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard