Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成x+;xx和x2B;xxx和x2B;xxxx。。。对于给定的整数(对于4->;4+;44+;444…)_Python - Fatal编程技术网

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