Python 将数字组合在一起形成多位数

Python 将数字组合在一起形成多位数,python,math,python-3.7,Python,Math,Python 3.7,我试图在Python3.7中将多个数字组合在一起,但我没有运气 我希望它是这样的: 1 + 4 + 5 = 145 我知道这很简单,但我一事无成 最简单的方法是将它们合并为字符串,然后将其解析回数字 x = str(1) + str(4) + str(5) print(int(x)) 或 您可以使用reduce以数学方式进行此操作 >>> l = [1, 4, 5] >>> >>> from functools import redu

我试图在Python3.7中将多个数字组合在一起,但我没有运气

我希望它是这样的:

1 + 4 + 5 = 145 

我知道这很简单,但我一事无成

最简单的方法是将它们合并为字符串,然后将其解析回数字

x = str(1) + str(4) + str(5)
print(int(x))

您可以使用reduce以数学方式进行此操作

>>> l = [1, 4, 5]
>>> 
>>> from functools import reduce
>>> reduce(lambda x,y: 10*x+y, l)
145
或者,您可以使用字符串concat

>>> int(''.join(map(str, l)))
145

您应该尝试将数字转换为字符串!当你这样做的时候

str(1)+str(4)+str(5)
你将得到145,但它将是一个字符串。如果您希望它在之后成为一个数字,那么您可以将整个事件转换为整数

int(str(1)+str(4)+str(5))

或只是将一个新变量的答案设置为整数,

如果你想用数字来计算,那么考虑一下基础-10个数是什么意思:

int(str(1)+str(4)+str(5))
145 = 1 * 10**2 + 4 * 10**1 + 5 * 10**0
所以,你们需要得到N个数字,范围从N-1到0,和数字同步。一种方法是使用enumerate加上一点额外的算术:

def add_digits(*digits):
    total = 0
    for i, digit in enumerate(digits):
        total += digit * 10**(len(digits)-i-1)
    return total
现在:

当然,这只适用于数字序列,在这些序列中,您知道预先有多少个数字。如果您想处理任何可数数字,甚至是用于生成器表达式的迭代器或其他东西,该怎么办?然后你可以重新思考这个问题:

1456 = ((1 * 10 + 4) * 10 + 5) * 10 + 6
因此:

请注意,您可以轻松地将任一版本扩展到其他基础:

def add_digits(*digits, base=10):
    total = 0
    for i, digit in enumerate(digits):
        total += digit * base**(len(digits)-i-1)
    return total

>>> hex(add_digits(1, 0xF, 2, 0xA, base=16))
'0x1f2a'

…使用stringy版本不太容易;您不能只执行int.joinmapstr、digits、base,而是需要将该str替换为一个函数,该函数将转换为给定基中的字符串。有,但没有明显可读的一行。

您只需编写一个函数,将数字或任何其他对象/数据类型连接为字符串即可

concatenate = lambda *args : ''.join([str(arg) for arg in args])

a = 1

print(concatenate(4, 5, 6))

print(concatenate(a, MagicNumber(1), "3"))
但在python中,您也可以创建一个类并编写神奇的函数来控制类中对象的加法、减法等。您可以创建一个类来存储一个数字,并按照自己的意愿进行加法。您可以将此代码保存在文件中,然后将其导入或粘贴到自己的脚本中

class MagicNumber():
    value = 0

    def __init__(self, value):
        self.value = int(value)

    def __str__(self):
        return str(self.value)

    def __int__(self):
        return self.value

    def __repr__(self):
        return self.value

    def __add__(self, b):
        return MagicNumber(str(self)+str(b))

if __name__ == "__main__":
    a = MagicNumber(4)
    b = MagicNumber(5)
    c = MagicNumber(6)

    print(a+b+c)

    #You could even do this but I strongly advise against it
    print(a+5+6)
这里有一个关于这些神奇方法的文档链接

intstr1+str4+str5如果您知道数字都是一位数字:100*x+10*y+z。否则,请使用intstrx+stry+strz。如果您想以数字形式而不是……严格地说,必须有一个词来表示……的话,您需要考虑以10为基数的数字是如何工作的:数字*10**i,其中i的范围是n-1到0。@abarnert:这通常被称为字符串处理或字符串操作。“是/是真的很擅长它”。@abarnert:那么从文本上来说-它是一个相对较短的副词。我认为这种方法过于简单。我把第二种解决方案简化了。感谢@martineauWest的反馈:我的意思是创建一个自定义类来实现这一点。Python有大量的内置文本处理功能,如果使用得当,可能会减少所需的代码,而且运行速度也会大大加快。这是我能想到的最好的方法,可以使一行代码的执行方式尽可能与问题作者希望的方式相似。此外,如果问题的作者想用减法或其他运算符做类似的事情,这也是一个解决方案,也包括了这一点@马提诺非常感谢非常感谢非常感谢非常感谢
concatenate = lambda *args : ''.join([str(arg) for arg in args])

a = 1

print(concatenate(4, 5, 6))

print(concatenate(a, MagicNumber(1), "3"))
class MagicNumber():
    value = 0

    def __init__(self, value):
        self.value = int(value)

    def __str__(self):
        return str(self.value)

    def __int__(self):
        return self.value

    def __repr__(self):
        return self.value

    def __add__(self, b):
        return MagicNumber(str(self)+str(b))

if __name__ == "__main__":
    a = MagicNumber(4)
    b = MagicNumber(5)
    c = MagicNumber(6)

    print(a+b+c)

    #You could even do this but I strongly advise against it
    print(a+5+6)