将数字组合在一起形成多位数字
Combining numbers together to form multiple digit number
我试图在 python 3.7 中将多个数字组合在一起,但我没有运气。
我希望它是这样的:
1 + 4 + 5 = 145
我知道这很简单,但我一事无成!
最简单的方法是将它们连接为字符串,然后将其解析回数字。
x = str(1) + str(4) + str(5)
print(int(x))
或
int(str(1) + str(4) + str(5))
您可以使用 reduce
以数学方式完成此操作
>>> l = [1, 4, 5]
>>>
>>> from functools import reduce
>>> reduce(lambda x,y: 10*x+y, l)
145
或者,您可以使用字符串连接
>>> int(''.join(map(str, l)))
145
您应该尝试将数字转换为字符串!当你做这样的事情时
str(1)+str(4)+str(5)
你会得到145,但它是一个字符串。如果你希望它之后是一个数字,那么你可以将整个东西转换为一个整数。
int(str(1)+str(4)+str(5))
或者只是将答案设置为一个新变量并将其转换为整数。
如果您想以数字方式执行此操作,请考虑以 10 为基数的数字的含义:
145 = 1 * 10**2 + 4 * 10**1 + 5 * 10**0
因此,您需要获得从 N-1 到 0 的 N 个数字,与数字同步。一种方法是使用 enumerate
加上一些额外的算术:
def add_digits(*digits):
total = 0
for i, digit in enumerate(digits):
total += digit * 10**(len(digits)-i-1)
return total
现在:
>>> add_digits(1, 4, 5)
145
当然,这仅适用于数字序列——您事先知道有多少位数字。如果您想使用任何可迭代的数字,甚至是生成器表达式或其他东西的迭代器,该怎么办?那你可以重新思考问题:
1456 = ((1 * 10 + 4) * 10 + 5) * 10 + 6
所以:
def add_digits(digits):
total = 0
for digit in digits:
total = total * 10 + digit
return total
>>> add_digits((1, 3, 5, 6))
1356
>>> add_digits(n for n in range(10) if n%2)
13579
请注意,您可以轻松地将任一版本扩展到其他基础:
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'
… 这不是 相当 用字符串版本做的那么容易;您不能只执行 int(''.join(map(str, digits)), base)
,而是需要将 str
替换为一个函数,该函数可转换为给定基数中的字符串。其中有 plenty of solutions for,但没有明显和可读的一行。
您可以编写一个函数,将数字或任何其他 object/datatype 连接为字符串
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 并编写魔术函数来控制 class 对象的添加、减去等方式。您可以创建一个 class 来存储一个数字并添加它,就像你想要的那样。您可以将此代码保存在一个文件中,然后将其导入或粘贴到您自己的脚本中。
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)
这里是关于这些 "magic methods" 的文档 link
https://docs.python.org/3/reference/datamodel.html
我试图在 python 3.7 中将多个数字组合在一起,但我没有运气。
我希望它是这样的:
1 + 4 + 5 = 145
我知道这很简单,但我一事无成!
最简单的方法是将它们连接为字符串,然后将其解析回数字。
x = str(1) + str(4) + str(5)
print(int(x))
或
int(str(1) + str(4) + str(5))
您可以使用 reduce
以数学方式完成此操作
>>> l = [1, 4, 5]
>>>
>>> from functools import reduce
>>> reduce(lambda x,y: 10*x+y, l)
145
或者,您可以使用字符串连接
>>> int(''.join(map(str, l)))
145
您应该尝试将数字转换为字符串!当你做这样的事情时
str(1)+str(4)+str(5)
你会得到145,但它是一个字符串。如果你希望它之后是一个数字,那么你可以将整个东西转换为一个整数。
int(str(1)+str(4)+str(5))
或者只是将答案设置为一个新变量并将其转换为整数。
如果您想以数字方式执行此操作,请考虑以 10 为基数的数字的含义:
145 = 1 * 10**2 + 4 * 10**1 + 5 * 10**0
因此,您需要获得从 N-1 到 0 的 N 个数字,与数字同步。一种方法是使用 enumerate
加上一些额外的算术:
def add_digits(*digits):
total = 0
for i, digit in enumerate(digits):
total += digit * 10**(len(digits)-i-1)
return total
现在:
>>> add_digits(1, 4, 5)
145
当然,这仅适用于数字序列——您事先知道有多少位数字。如果您想使用任何可迭代的数字,甚至是生成器表达式或其他东西的迭代器,该怎么办?那你可以重新思考问题:
1456 = ((1 * 10 + 4) * 10 + 5) * 10 + 6
所以:
def add_digits(digits):
total = 0
for digit in digits:
total = total * 10 + digit
return total
>>> add_digits((1, 3, 5, 6))
1356
>>> add_digits(n for n in range(10) if n%2)
13579
请注意,您可以轻松地将任一版本扩展到其他基础:
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'
… 这不是 相当 用字符串版本做的那么容易;您不能只执行 int(''.join(map(str, digits)), base)
,而是需要将 str
替换为一个函数,该函数可转换为给定基数中的字符串。其中有 plenty of solutions for,但没有明显和可读的一行。
您可以编写一个函数,将数字或任何其他 object/datatype 连接为字符串
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 并编写魔术函数来控制 class 对象的添加、减去等方式。您可以创建一个 class 来存储一个数字并添加它,就像你想要的那样。您可以将此代码保存在一个文件中,然后将其导入或粘贴到您自己的脚本中。
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)
这里是关于这些 "magic methods" 的文档 link https://docs.python.org/3/reference/datamodel.html