【问题标题】:How to calculate 2 digits different number system than decimal [Python]如何计算与十进制不同的 2 位数字系统 [Python]
【发布时间】:2022-01-05 07:49:02
【问题描述】:

我无法计算与十进制不同的数字系统中的 2 位数字。 这是一个例子。

operation = "101 + 101"
result = eval(operation)
print(result)

结果是 202,但我想用二进制计算,结果是 10,所以这样做的想法是什么。 我知道我可以在数字前输入 0b,但在我的情况下我不能这样做。 有没有类似的图书馆或其他东西可以计算它?

【问题讨论】:

  • 你用正则数计算运算并将其转换为你想要的基数以显示它
  • 如果您将字符串作为输入,则使用 int 构造函数的 base 的可选第二个参数将其转换为普通 int:int("101",2)

标签: python numbers system operation


【解决方案1】:

如果您输入的是一个字符串,其中包含您想要传递给 eval 的某些操作,您可以使用正则表达式将“0b”附加到数字,然后将其传递给 eval

>>> import re
>>> operation = "101 + 101"
>>> re.sub("([01]+)",r"0b\1",operation)
'0b101 + 0b101'
>>> eval('0b101 + 0b101')
10
>>> 

为了扩展它以处理基数 2 和 16,我们可以将它变成一个函数

>>> def toBase(text,base):
        if base==2:
            num="01"
        elif base==16:
            num ="0123456789abcdefABCDEF"
        else:
            raise NotImplementedError
        new = f"int('\\1',{base})"
        return re.sub(f"([{num}]+)",new,text)


>>> toBase("E39 + 93",16)
"int('E39',16) + int('93',16)"
>>> toBase("101 + 101",2)
"int('101',2) + int('101',2)"
>>> eval(toBase("E39 + 93",16))
3788
>>> eval(toBase("101 + 101",2))
10
>>> 

【讨论】:

  • Regular exp 是一些答案,但不是仅在特定情况下吗?例如,我还需要从十六进制“E39 - 93”计算以及如何将 reg exp 写入这种情况。
  • 您只想处理 2 和 16 个碱基?从 2 到 60 的任何基数?
  • 只有二进制和十六进制
  • @Kubskyy 我更新了一个同时处理二进制和十六进制的函数
  • 效果很好,非常感谢。
【解决方案2】:

你可以告诉 int() 函数你想要一个字符串的数字基数。

int('101', 2) + int('101', 2)
Out[2]: 10

【讨论】:

  • 我知道但是有没有办法将整个表达式“101 + 101”直接转换为二进制运算以计算为10
【解决方案3】:

您可以手动尝试使用“for”循环将两个数字相加。 您将自己累加每个数字。 获得每个数字的方法是拥有该数字%10,这将为您提供正确的数字。 在您的周期中需要有一个“if”语句来检查当您将两个数字相加时它们的总和是否高于允许的值(这将由您使用的数字系统确定。在您的情况下,总和两位数中的一个不应高于 1)。在总和确实变得更高的情况下,您可以通过在正确的时间将其保存在另一个变量中来处理它(这将是您将下一个数字相加时) 最后,您需要将您的号码除以 10 才能进入下一位。

【讨论】:

  • 如果您可以提供代码 sn-ps 来演示您描述的操作,则可以改进此答案。
猜你喜欢
  • 2020-01-10
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多