How do you make a calculator?

Phantom

I'm making a roman calculator: An input asks for a ROMAN calculation (Like I + IV) and the output is the answer in roman numerals. If the output if more than 1000, the output is "error." Here's my code:

def toRoman (x):
    roman= ""
    hundreds = x//100
    remainder = x%100    # xx=532,  d=532//100=5, x=532%100=32
    if hundreds == 1:
        roman+="C"
    elif hundreds == 2:
        roman+="CC"
    elif hundreds == 3:
        roman+="CCC"
    elif hundreds == 4:
        roman+="CD"
    elif hundreds == 5:
        roman+="D"
    elif hundreds == 6:
        roman+="DC"
    elif hundreds == 7:
        roman+="DCC"
    elif hundreds == 8:
        roman+="DCCC"
    elif hundreds == 9:
        roman+="CM"
    tens = remainder//10#  d=32//10=3,   x= 32%10=2
    ones = remainder % 10
    if tens == 1:
        roman+="X"
    elif tens == 2:
        roman+="XX"
    elif tens == 3:
        roman+="XXX"
    elif tens == 4:
        roman+="XL"
    elif tens == 5:
        roman+="L"
    elif tens == 6:
        roman+="LX"
    elif tens == 7:
        roman+="LXX"
    elif tens == 8:
        roman+="LXXX"
    elif tens == 9:
        roman+="XC"
    if ones == 1:
        roman+="I"
    elif ones == 2:
        roman+="II"
    elif ones == 3:
        roman+="III"
    elif ones == 4:
        roman+="IV"
    elif ones == 5:
        roman+="V"
    elif ones == 6:
        roman+="VI"
    elif ones == 7:
        roman+="VII"
    elif ones == 8:
        roman+="VIII"
    elif ones == 9:
        roman+="IX"
    return roman

def toDecimal (s):
    old= 100000
    t = 0
    v=0
    for i in range(0, len(s)):
        if s[i] == "I":
            v = 1
        elif s[i] == "V":
            v = 5
        elif s[i] == "X":
            v = 10
        elif s[i] == "L":
            v = 50
        elif s[i] == "C":
            v = 100
        elif s[i] == "D":
            v = 500
        elif s[i] == "M":
            v = 1000
        if v > old:
            t = v-t
        else:
            t = t + v
        old = v
    return t

I'm kind of stuck on how to combine the functions and make the calculator. Can anyone help? Thanks.

Riccardo Bucco

Here is a possible way to shorten your functions and make them more readable:

H = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM']
T = ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC']
O = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']
V = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 100}

def to_roman(x):
    return H[x // 100] + T[(x % 100) // 10] + O[(x % 100) % 10]

def to_decimal(x):
    result = 0
    i = 0
    while i < len(x):
        s1 = V[x[i]]
        if i + 1 < len(x):
            s2 = V[x[i+1]]
            if s1 >= s2:
                result += s1
                i += 1
            else:
                result += s2 - s1
                i += 2
        else:
            result += s1
            i += 1
    return result

Here is how you can implement your calculator:

number1 = to_decimal(input()) # input a Roman number
operator = input() # input +, -, * or /
number2 = to_decimal(input()) # input a Roman number

if operator == '+':
    result = number1 + number2
elif operator == '-':
    result = number1 - number2
elif operator == '*':
    result = number1 * number2
else:
    result = number1 // number2

print(f'Result: {to_roman(result)}')

You should still do some work to handle special cases (divisions whose result is not an integer, negative numbers, numbers higher than 1000 etc).

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Java calculator how to make backspace

From Dev

how to make a profit calculator in python?

From Java

Flutter: How do you make a card clickable?

From Dev

How do you make a static class in swift?

From Dev

How do you make speech bubble with Tooltipsy?

From Dev

How do you make a circle from origin

From Dev

How do you make a changing background in rails?

From Dev

How do you join a 'Collection' to make a string

From Dev

How do you make an email go to spam

From Dev

How do you make a UIWebView content editable?

From Dev

How do you make a clickable sprite in SFML?

From Dev

How do you make relative references in R?

From Dev

How do you make this plist file programmatically?

From Dev

How do you make a class flatMappable?

From Dev

How do you make "infoboxes" in mediawiki?

From Dev

how do you make a protected window in applescript?

From Dev

How do you make the contents of a ListView an ArrayList?

From Dev

How do you make a vector of class objects?

From Dev

How do you make a view drop dimensions?

From Dev

How do you make changes to a Word template?

From Dev

How do you make filesystems in mac OSX

From Dev

How do you make less show the filename?

From Dev

How do you make a circle from origin

From Dev

surfc: How do you make contours thicker?

From Dev

How do you make this plist file programmatically?

From Dev

How do you make an automatic "slideshow" of text?

From Dev

How do you make the input text disappear?

From Dev

How do you make a nav bar "sticky"?

From Dev

How do you make a changing background in rails?