Python 生成x+;xx和x2B;xxx和x2B;xxxx。。。对于给定的整数(对于4->;4+;44+;444…)
我必须在每次迭代中递增地连接一个给定的数字,以便它返回一个和和和连接的字符串。这是我的尝试:Python 生成x+;xx和x2B;xxx和x2B;xxxx。。。对于给定的整数(对于4->;4+;44+;444…),python,Python,我必须在每次迭代中递增地连接一个给定的数字,以便它返回一个和和和连接的字符串。这是我的尝试: def digit_sum_from_letters(x): a = int("%s" % x) b = int("%s%s" % (x,x)) c = int("%s%s%s" % (x,x,x)) d = int("%s%s%s%s" % (x,x,x,x)) return a+b+c+d print digit_sum_from_letters(9) 返
def digit_sum_from_letters(x):
a = int("%s" % x)
b = int("%s%s" % (x,x))
c = int("%s%s%s" % (x,x,x))
d = int("%s%s%s%s" % (x,x,x,x))
return a+b+c+d
print digit_sum_from_letters(9)
返回11106
但我需要生成给定整数的和,所以我需要一个循环,但我被卡住了
谢谢 有几种方法可以做到这一点。我将从最类似于您的解决方案开始,如果您愿意,我可以介绍一种可能更快的方法:)
下面的函数就可以了,n是你的数字(4),m是迭代次数(4,44,44444444,…) 运行示例:
>>> sumLetters(9,4 )
11106
>>>
给定
digit
和n
(例如,digit=4
和n=3
是4+44+444
),您只需生成一个1序列,并将其总和乘以digit
digit = 4
n = 3
# 1, 11, 111
ones = [ int("1" * i) for i in range(1, n+1)]
# 4 + 44 + 444 = 4 * (1 + 11 + 111)
answer = digit * sum(ones)
这应该起作用:
>>> def digit_sum(x):
lst = [str(x)*i for i in range(1,x+1)]
print '+'.join(lst)
return sum(map(int, lst))
>>> digit_sum(7)
7+77+777+7777+77777+777777+7777777
8641969
>>> digit_sum(9)
9+99+999+9999+99999+999999+9999999+99999999+999999999
1111111101
>>> digit_sum(3)
3+33+333
369
您可以使用列表压缩来完成此操作:
x = 9
c = 4
sum([int(str(x) * i) for i in xrange(1,c + 1)])
11106
只是为了好玩:
def f(n):
return n*int("123456789"[:n])
它给出:
1 -> 1
2 -> 24
3 -> 369
4 -> 4936
5 -> 61725
6 -> 740736
7 -> 8641969
8 -> 98765424
9 -> 1111111101
谁告诉你需要一个环?别听他们的
def fn(n):
x,z = n,10
return x*(z*(z**n-1) // (z-1) - n) // (z-1)
print(fn(1)) # 1
print(fn(2)) # 24
print(fn(3)) # 369
print(fn(4)) # 4936
编辑:很遗憾,他们也要求你输入表达式字符串。在这一部分,您必须使用循环,您需要以什么方式使用循环?你能说得更具体些吗?你能澄清一下目标吗?你是说如果用户输入2,它应该是(2+22),如果用户输入3,它应该是(3+33+333)?或者是别的什么?请注意,您只需要计算总和=1+11+111+…+1...11. 一旦你有了那个总数,你只需要将给定的数字乘以1。@goodtimeslim是的,对于3,它是3+33+333。当它不仅仅是一个数字时,会发生有趣的事情:)OP没有做出那个规定哈哈
def f(n):
return n*int("123456789"[:n])
1 -> 1
2 -> 24
3 -> 369
4 -> 4936
5 -> 61725
6 -> 740736
7 -> 8641969
8 -> 98765424
9 -> 1111111101
def fn(n):
x,z = n,10
return x*(z*(z**n-1) // (z-1) - n) // (z-1)
print(fn(1)) # 1
print(fn(2)) # 24
print(fn(3)) # 369
print(fn(4)) # 4936