在python中添加字符串(以12为基数的表示形式)和整数/其他字符串

时间:2018-09-14 01:52:05

标签: python string sum calculator

我需要创建一个计算器,该计算器可以在以12为基数的数字上加数字,并且在不同的摘要上具有不同的限制。

以12为基础的序列:[0,1,2,3,4,5,6,7,8,9,“ A”,“ B”]

限制必须为:

  • 第一位数:限制为“ B”
  • 第二位数字:限制4

这意味着您应该这样计算:[1,2,3,4,5,6,7,8,9,A,B,10,11,... 48,49,4A,4B] < / p>

但是我不知道该怎么做才能求和2个数字

我在python中有以下代码:

list1=[0,1,2,3,4,5,6,7,8,9,"A","B"]
list2=[0,1,2,3,4]
list3=[0,1,2,3,4,5,6,7,8,9,"A","B"]
list4=[0,1,2,3,4]


def calculadora (entrada1, operacion, entrada2):
    #parte de valor 1:
    digito1_1=str(list2[int(entrada1//12)])
    digito1_2=str(list1[int(entrada1%12)])
    valor1=float(digito1_1+digito1_2)
    #parte de valor 2
    digito2_1=str(list2[int(entrada2//12)])
    digito2_2=str(list1[int(entrada2%12)])
    valor2=float(digito2_1+digito2_2)
    if operacion==str("suma") or "+":
        return float(valor1+valor2)
entrada1 = float(input("inserte primer valor"))
operacion=str(input("inserte operación"))
entrada2 = float(input("inserte segundo valor"))
print (calculadora(entrada1,operacion,entrada2))

它适用于数字,但我们想对3B之类的数字求和,因为它编码为字符串,所以给我一个ValueError。

有人可以帮我还是说我如何才能将这些数字相加?

1 个答案:

答案 0 :(得分:1)

将以12为底的编码字符串转换为int的最简单方法是通过int(string, 12)。反之则不那么容易,因为Python似乎没有内置的方法来做到这一点。您可以将格式说明符用于二进制,八进制和十六进制,但不能用于任意基数。

您可以使用divmod()获得数字的反向列表,该数字除以余数。

def to_digits(x, base):
     while x > 0:
         x, rem = divmod(x, base)
         yield rem

但要往返,我们需要一个字符串。将int转换为字符(使用字符串作为查找表),然后将它们连接为字符串,然后使用负步进的切片将其反转。

def to_base_12(num):
    return ''.join('0123456789AB'[d] for d in to_digits(num, 12))[::-1]

使用更长的查找表,您可以将其推广到更高的基础。

字符串已经是序列,但是如果要将其转换回列表,则可以仅在其上调用list()。相反,就是您刚刚看到的''.join()方法。

现在您可以将base-12表示形式转换为Python int对象并返回,只需使用+添加它们即可。