Python - Homework - Converting Any Base to Any Base

前端 未结 6 1279
孤街浪徒
孤街浪徒 2020-11-28 09:53

I\'m trying to make a program to convert a number in any base to another base of the user\'s choice. The code I have so far goes like this:

innitvar = float(         


        
6条回答
  •  天命终不由人
    2020-11-28 10:13

    This should be the first half of the answer to your problem. Can you figure out how to convert to a base?

    # Create a symbol-to-value table.
    SY2VA = {'0': 0,
             '1': 1,
             '2': 2,
             '3': 3,
             '4': 4,
             '5': 5,
             '6': 6,
             '7': 7,
             '8': 8,
             '9': 9,
             'A': 10,
             'B': 11,
             'C': 12,
             'D': 13,
             'E': 14,
             'F': 15,
             'G': 16,
             'H': 17,
             'I': 18,
             'J': 19,
             'K': 20,
             'L': 21,
             'M': 22,
             'N': 23,
             'O': 24,
             'P': 25,
             'Q': 26,
             'R': 27,
             'S': 28,
             'T': 29,
             'U': 30,
             'V': 31,
             'W': 32,
             'X': 33,
             'Y': 34,
             'Z': 35,
             'a': 36,
             'b': 37,
             'c': 38,
             'd': 39,
             'e': 40,
             'f': 41,
             'g': 42,
             'h': 43,
             'i': 44,
             'j': 45,
             'k': 46,
             'l': 47,
             'm': 48,
             'n': 49,
             'o': 50,
             'p': 51,
             'q': 52,
             'r': 53,
             's': 54,
             't': 55,
             'u': 56,
             'v': 57,
             'w': 58,
             'x': 59,
             'y': 60,
             'z': 61,
             '!': 62,
             '"': 63,
             '#': 64,
             '$': 65,
             '%': 66,
             '&': 67,
             "'": 68,
             '(': 69,
             ')': 70,
             '*': 71,
             '+': 72,
             ',': 73,
             '-': 74,
             '.': 75,
             '/': 76,
             ':': 77,
             ';': 78,
             '<': 79,
             '=': 80,
             '>': 81,
             '?': 82,
             '@': 83,
             '[': 84,
             '\\': 85,
             ']': 86,
             '^': 87,
             '_': 88,
             '`': 89,
             '{': 90,
             '|': 91,
             '}': 92,
             '~': 93}
    
    # Take a string and base to convert to.
    # Allocate space to store your number.
    # For each character in your string:
    #     Ensure character is in your table.
    #     Find the value of your character.
    #     Ensure value is within your base.
    #     Self-multiply your number with the base.
    #     Self-add your number with the digit's value.
    # Return the number.
    
    def str2int(string, base):
        integer = 0
        for character in string:
            assert character in SY2VA, 'Found unknown character!'
            value = SY2VA[character]
            assert value < base, 'Found digit outside base!'
            integer *= base
            integer += value
        return integer
    

    Here is the second half of the solution. By using these two functions, converting bases is very easy to do.

    # Create a value-to-symbol table.
    VA2SY = dict(map(reversed, SY2VA.items()))
    
    # Take a integer and base to convert to.
    # Create an array to store the digits in.
    # While the integer is not zero:
    #     Divide the integer by the base to:
    #         (1) Find the "last" digit in your number (value).
    #         (2) Store remaining number not "chopped" (integer).
    #     Save the digit in your storage array.
    # Return your joined digits after putting them in the right order.
    
    def int2str(integer, base):
        array = []
        while integer:
            integer, value = divmod(integer, base)
            array.append(VA2SY[value])
        return ''.join(reversed(array))
    

    After putting it all together, you should end up with the program below. Please take time to figure it out!

    innitvar = raw_input("Please enter a number: ")
    basevar = int(raw_input("Please enter the base that your number is in: "))
    convertvar = int(raw_input("Please enter the base that you would like to convert to: "))
    
    # Create a symbol-to-value table.
    SY2VA = {'0': 0,
             '1': 1,
             '2': 2,
             '3': 3,
             '4': 4,
             '5': 5,
             '6': 6,
             '7': 7,
             '8': 8,
             '9': 9,
             'A': 10,
             'B': 11,
             'C': 12,
             'D': 13,
             'E': 14,
             'F': 15,
             'G': 16,
             'H': 17,
             'I': 18,
             'J': 19,
             'K': 20,
             'L': 21,
             'M': 22,
             'N': 23,
             'O': 24,
             'P': 25,
             'Q': 26,
             'R': 27,
             'S': 28,
             'T': 29,
             'U': 30,
             'V': 31,
             'W': 32,
             'X': 33,
             'Y': 34,
             'Z': 35,
             'a': 36,
             'b': 37,
             'c': 38,
             'd': 39,
             'e': 40,
             'f': 41,
             'g': 42,
             'h': 43,
             'i': 44,
             'j': 45,
             'k': 46,
             'l': 47,
             'm': 48,
             'n': 49,
             'o': 50,
             'p': 51,
             'q': 52,
             'r': 53,
             's': 54,
             't': 55,
             'u': 56,
             'v': 57,
             'w': 58,
             'x': 59,
             'y': 60,
             'z': 61,
             '!': 62,
             '"': 63,
             '#': 64,
             '$': 65,
             '%': 66,
             '&': 67,
             "'": 68,
             '(': 69,
             ')': 70,
             '*': 71,
             '+': 72,
             ',': 73,
             '-': 74,
             '.': 75,
             '/': 76,
             ':': 77,
             ';': 78,
             '<': 79,
             '=': 80,
             '>': 81,
             '?': 82,
             '@': 83,
             '[': 84,
             '\\': 85,
             ']': 86,
             '^': 87,
             '_': 88,
             '`': 89,
             '{': 90,
             '|': 91,
             '}': 92,
             '~': 93}
    
    # Take a string and base to convert to.
    # Allocate space to store your number.
    # For each character in your string:
    #     Ensure character is in your table.
    #     Find the value of your character.
    #     Ensure value is within your base.
    #     Self-multiply your number with the base.
    #     Self-add your number with the digit's value.
    # Return the number.
    
    integer = 0
    for character in innitvar:
        assert character in SY2VA, 'Found unknown character!'
        value = SY2VA[character]
        assert value < basevar, 'Found digit outside base!'
        integer *= basevar
        integer += value
    
    # Create a value-to-symbol table.
    VA2SY = dict(map(reversed, SY2VA.items()))
    
    # Take a integer and base to convert to.
    # Create an array to store the digits in.
    # While the integer is not zero:
    #     Divide the integer by the base to:
    #         (1) Find the "last" digit in your number (value).
    #         (2) Store remaining number not "chopped" (integer).
    #     Save the digit in your storage array.
    # Return your joined digits after putting them in the right order.
    
    array = []
    while integer:
        integer, value = divmod(integer, convertvar)
        array.append(VA2SY[value])
    answer = ''.join(reversed(array))
    
    # Display the results of the calculations.
    print answer
    

提交回复
热议问题