我需要创建一个计算器,该计算器可以在以12为基数的数字上加数字,并且在不同的摘要上具有不同的限制。
以12为基础的序列:[0,1,2,3,4,5,6,7,8,9,“ A”,“ B”]
限制必须为:
这意味着您应该这样计算:[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。
有人可以帮我还是说我如何才能将这些数字相加?
答案 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对象并返回,只需使用+
添加它们即可。