数字系统转换器python

数字系统转换器python,python,numbers,Python,Numbers,嗨,我想做我自己的数字转换器,将二进制、八进制或十六进制的输入转换成相应的十进制值 我必须使用两个单独的函数,第一个将字母数字转换为数值,然后第二个将结果转换为十进制值,方法是使用输入基将其转换为十进制值 def hexConvert (x): return int(x, base) x = str(input("input value to convert to decimal: ")) base = int(input("Base of value to be convert

嗨,我想做我自己的数字转换器,将二进制、八进制或十六进制的输入转换成相应的十进制值

我必须使用两个单独的函数,第一个将字母数字转换为数值,然后第二个将结果转换为十进制值,方法是使用输入基将其转换为十进制值

   def hexConvert (x):
    return int(x, base)

x = str(input("input value to convert to decimal: "))
base = int(input("Base of value to be converted to decimal: "))
print(x, " in base ", base, " = ", hexConvert(x), " in decimal")
我知道这很有效,而且很健壮。我想通过手动操作来学习如何使用更多python函数

这就是我目前拥有的:

    number = (input("Enter value to be converted to decimal: "))
base = int(input("Enter the base of the value: "))

for index in number:
    print(index)
def hexConvert(number, base):
    for number > 0:
        if number == 1:
            return 1
        if number == 2:
            return 2
        if number == 3:
            return 3
        if number == 4:
            return 4
        if number == 5:
            return 5
        if number == 6:
            return 6
        if number == "7":
            return 7
        if number == "8":
            return 8
        if number == "9":
            return 9
        if number == "A":
            return 10
        if number == "B":
            return 11
        if number == "C":
            return 12
        if number == "D":
            return 13
        if number == "E":
            return  14
        elif number == "F":
            return 15
        else:
            print(number)


nString = ""
def deciConvert(number, base):
    number = int(number)
    while number > 0:
        bString = number%base
        nString = nString + str(bString)
        number = number // base

print(deciConvert(number, base))
我已经迷失在这一点上,我想我还没有开始任何计算,我真的很感激任何第二意见。 谢谢大家!

我建议使用通用的encode和dec_to_基函数

ALPHABET = \
  "0123456789abcdefghijklmnopqrstuvwxyz"

def encode (n):
  try:
    return ALPHABET [n]
  except IndexError:
    raise Exception ("cannot encode: %s" % n)

def dec_to_base (dec = 0, base = 16):
  if dec < base:
    return encode (dec)
  else:
    return dec_to_base (dec // base, base) + encode (dec % base)

print (dec_to_base (9))
# 9

print (dec_to_base (10))
# a

print (dec_to_base (255))
# ff

print (dec_to_base (256))
# 100
通过提供同构decode和base_to_dec来反转编码

使用不同的底座

print (dec_to_base ('11111111', base = 2))
# 255

print (dec_to_base ('100000000', base = 2))
# 256
我建议使用通用编码和dec_to_基函数

ALPHABET = \
  "0123456789abcdefghijklmnopqrstuvwxyz"

def encode (n):
  try:
    return ALPHABET [n]
  except IndexError:
    raise Exception ("cannot encode: %s" % n)

def dec_to_base (dec = 0, base = 16):
  if dec < base:
    return encode (dec)
  else:
    return dec_to_base (dec // base, base) + encode (dec % base)

print (dec_to_base (9))
# 9

print (dec_to_base (10))
# a

print (dec_to_base (255))
# ff

print (dec_to_base (256))
# 100
通过提供同构decode和base_to_dec来反转编码

使用不同的底座

print (dec_to_base ('11111111', base = 2))
# 255

print (dec_to_base ('100000000', base = 2))
# 256
您可以尝试以下方法:

def hextodec(str_in, base):
    dec = int(str_in, base)
    return dec

if __name__ == "__main__":
    hex = input()
    base = int(input()) 
    hextodec(hex, base)
您可以尝试以下方法:

def hextodec(str_in, base):
    dec = int(str_in, base)
    return dec

if __name__ == "__main__":
    hex = input()
    base = int(input()) 
    hextodec(hex, base)

我写了一个函数来从任意基转换到任意基。它可能有些慢,但它能工作

import math
def convert(number, number_base, output_base):
    number = str(number)
    output = ''
    decimal_input = 0
    index = len(number)-1
    for char in number:
        decimal_input += number_base.index(char)*(len(number_base)**index)
        index -= 1  
    index = math.ceil(math.sqrt(decimal_input / len(output_base)))
    while index >= 0:
        if not (len(output) == 0 and decimal_input // len(output_base)**index == 0):
            output += output_base[decimal_input // len(output_base)**index]
        decimal_input %= len(output_base)**index
        index -= 1
    return output
要使用它,只需创建如下两个字符串:

decimal = '0123456789'
hex = '0123456789ABCDEF'
hex_100 = convert('100', decimal, hex)
print(hex_100)  #64
您可以将其用于任何数字基,也可以是:weird='.g'。
在这种情况下,奇怪的是一个二进制系统。是0,g是1。注意:不能使用浮点数或负数。

我编写了一个函数,可以将任意基转换为任意基。它可能有些慢,但它能工作

import math
def convert(number, number_base, output_base):
    number = str(number)
    output = ''
    decimal_input = 0
    index = len(number)-1
    for char in number:
        decimal_input += number_base.index(char)*(len(number_base)**index)
        index -= 1  
    index = math.ceil(math.sqrt(decimal_input / len(output_base)))
    while index >= 0:
        if not (len(output) == 0 and decimal_input // len(output_base)**index == 0):
            output += output_base[decimal_input // len(output_base)**index]
        decimal_input %= len(output_base)**index
        index -= 1
    return output
要使用它,只需创建如下两个字符串:

decimal = '0123456789'
hex = '0123456789ABCDEF'
hex_100 = convert('100', decimal, hex)
print(hex_100)  #64
您可以将其用于任何数字基,也可以是:weird='.g'。
在这种情况下,奇怪的是一个二进制系统。是0,g是1。注意:不使用浮点数或负数。

对于数字>0:是无效语法,并且您的if语句在比较数字是字符串还是int时不一致。是的,有时您比较字符串,有时比较数字。如果:chr2num={stri如果i<10 else chrord'A'+i-10:i for i in range 16},那么只需执行以下操作:chr2num[number]若要获取以10为基数的实际数字,for number>0:的语法无效,并且您的if语句在将数字与字符串或int进行比较方面不一致。是的,有时您与字符串进行比较,有时与数字进行比较。如果:chr2num={stri如果i<10 else chrord'A'+i-10:i for i in range 16},那么只需执行以下操作:chr2num[number]要获得以10为基数的实际数字,使用列表编码(尤其是保存为常量时)可能比我在注释中建议的词典理念更快。+1使用列表编码(尤其是保存为常量时)可能比我在注释中建议的词典理念更快。+1