我正在尝试制作一个程序,以将任意基数的数字转换为用户选择的另一基数。到目前为止,我的代码是这样的:
innitvar = float(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: "))
这些是我从用户那里获得的数据。初始编号,其初始基数以及用户要转换为的基数。据我了解,我需要转换为以10为基数,然后再转换为用户指定的所需基数。
这是我碰到的地方:我需要将初始数字中最左边的数字乘以其初始基数,然后在右边添加下一个数字,然后重复直到我碰到最右边的数字。我了解如何在纸上进行此操作,但是我不知道如何将其放入Python代码中。我不确定如何将第一个数字相乘,然后再加上下一个,也不知道如何让程序知道何时停止执行此操作。
我并不是要为我编写程序,但我想指出正确的方向。
谢谢你的时间!
这应该是您问题的答案的上半部分。您能弄清楚如何转换为基数吗?
# 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
这是解决方案的后半部分。通过使用这两个函数,转换基数非常容易。
# 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))
将所有内容放在一起后,您应该结束下面的程序。请花点时间弄清楚!
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