Python “我该怎么做?”;如果n为3,则返回'1+;。。1+;2+;。。1+;2+;3+`&引用;

Python “我该怎么做?”;如果n为3,则返回'1+;。。1+;2+;。。1+;2+;3+`&引用;,python,python-3.x,for-loop,while-loop,Python,Python 3.x,For Loop,While Loop,定义一个名为nested\u increasing\u additions(n)的函数,该函数接收一个正整数(n),并返回一个字符串,如以下示例所示: 如果n为3,则函数应返回字符串: 1+..1+2+..1+2+3+.. 如果n为5,则函数应返回字符串: 1+…1+2+…1+2+3+…1+2+3+4+…1+2+3+4+5.+ 我认为,我可以将n设置为一个列表[1,2,3],并使用while循环或for循环重复n次。对于第一个循环,它返回1+..,对于第二个循环,它返回1+2..,不知何故(我不

定义一个名为
nested\u increasing\u additions(n)
的函数,该函数接收一个正整数
(n)
,并返回一个字符串,如以下示例所示:


如果
n
3
,则函数应返回字符串:
1+..1+2+..1+2+3+..


如果
n
5
,则函数应返回字符串:
1+…1+2+…1+2+3+…1+2+3+4+…1+2+3+4+5.+

我认为,我可以将
n
设置为一个列表
[1,2,3]
,并使用while循环或for循环重复
n次。对于第一个循环,它返回
1+..
,对于第二个循环,它返回
1+2..
,不知何故(我不知道),它在
2
处停止,这与重复时间相同

我不知道我的想法是否正确。需要一些帮助和解释!谢谢大家!

def nested_increasing_additions(n):
    l=['']
    for i in range(1, n+1):
        l.append(l[-1]+str(i)+'+')
    return '..'.join(l[1:])

这将返回一个字符串,其结尾不带
。如果您想这样做,只需执行
返回'..'。join(l[1:])+'..'
这些字符串的连续求值将产生一系列四面体数。例如,对于输入5,输出计算为35。这是构建边长为5的四面体所需的球体数

要了解它与问题中的和的关系,请注意,四面体的离散“体积”将等于从上到下的三角形“切片”的和

35 = 1 + 3 + 6 + 10 + 15
   = 1 + (1+2) + (1+2+3) + (1+2+3+4) + (1+2+3+4+5)
通过类似的论证,三角形数由连续整数的切片组成


请原谅数学运算,将封闭形式的解决方案调整为所需的输出格式很困难(但并非不可能)

def tetrahedral(n): 
    return n*(n+1)*(n+2)//6


def string_generator(n):
    x = tetrahedral(n)
    n = N = 1
    while x > 0:
        while n <= N:
            yield str(n) + '+'
            n += 1
        x -= N*(N+1)//2
        n = 1
        N += 1
        yield '..'


def nested_increasing_additions(n):
    return ''.join(string_generator(n))
def四面体(n):
返回n*(n+1)*(n+2)//6
def字符串_生成器(n):
x=四面体(n)
n=n=1
当x>0时:

当n时,您可以一步一步地构建完整的字符串,并在每一步记住最后添加的内容:

def nested_increasing_additions(n):
    complete_string = ""
    add_string = ""
    for i in range(1,n+1):
        add_string += str(i) + "+"
        complete_string += add_string + ".."
    return complete_string

print(nested_increasing_additions(1))
print(nested_increasing_additions(3))
print(nested_increasing_additions(5))
python3的输出为:

1+..
1+..1+2+..1+2+3+..
1+..1+2+..1+2+3+..1+2+3+4+..1+2+3+4+5+..

你可以用这样的东西

def nested_increasing_additions(n):
    string = ""
    for i in range(1,n+1): #1
        for j in range(1,i+1): #2
            string += str(j)+"+" #4
        string += ".." #5
    print(string)
这是一个嵌套的增加的添加的打印输出(4) 1+..1+2+..1+2+3+..1+2+3+4+..
我认为这是不言自明的,并不复杂。

假设您确实需要在每个返回字符串的末尾添加
。“
并且递归是可以的,下面是一个解决方案:

def nested_increasing_additions(n):
    if n == 1:
        return "1+.."
    else:
        return nested_increasing_additions(n-1) + '%s+..' % '+'.join(str(i) for i in range(1, n+1))

print(nested_increasing_additions(3))
print(nested_increasing_additions(5))
type(nested_increasing_additions(1))
打印

1+..1+2+..1+2+3+..
1+..1+2+..1+2+3+..1+2+3+4+..1+2+3+4+5+..
<type 'str'>
1+..1+2+..1+2+3+。。
1+..1+2+..1+2+3+..1+2+3+4+..1+2+3+4+5+..

说明

1+..1+2+..1+2+3+..
1+..1+2+..1+2+3+..1+2+3+4+..1+2+3+4+5+..
<type 'str'>
  • 当传入的参数值通过另一半的减法达到1时,第一个return和if(true)块结束递归调用
  • 后半部分(else块)调用下一次迭代,将
    n
    减去1,并调用当前迭代的字符串构建(如果
    n!=1
  • 外观复杂的代码
    '%s+..“%+'.join(str(i)表示范围(1,n+1)中的i))
    只是将
    范围
    函数生成的数字列表串联起来,转换为字符串和
    “+..”
    • range(1,n+1)
      返回从1开始到
      n+1
      的整数列表,因此
      range(1,3)
      产生
      [1,2]
      。这被传递给join,join在每个数字之间放置一个
      +
    • 这是怎么回事:

      def nested_increasing_additions(n):
      
          string = ""
          new_string = ""
          dot = ".."
      
          for i in range(1, n+1):
              new_string+=('{}+'.format(i))
              string = string+new_string+dot
              print(string)
      
          return (string)
      
      输出:

      nested_increasing_additions(3)    
      
      '1+..1+2+..1+2+3+..'
      

      你能展示一下你的代码吗?为什么你的第一个字符串以
      结尾。
      但是第二个字符串不是?”函数应该返回字符串“一个让书呆子被剪的全新级别,祝贺你!