我怎么做“如果n是3,返回`1 + .. 1 + 2 + .. 1 + 2 + 3 + ..”

时间:2016-11-16 20:40:01

标签: python python-3.x for-loop while-loop

定义一个名为nested_increasing_additions(n)的函数,它接收一个正整数(n)返回一个字符串,如以下示例所示:

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

如果n5,则函数应返回字符串: 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停止,这与重复时间相同。 / p>

我不知道我是否认为是对的。需要一些帮助和解释!谢谢!

6 个答案:

答案 0 :(得分:4)

对这些字符串的连续评估会产生一系列四面体数。例如,对于输入5,输出的计算结果为35.这是构建边长为5的四面体所需的球体数。

tetrahedron

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

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))

通过类似的论证,三角形数字由连续整数的切片组成。

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

@Injectable()
export class DeezerService{

  constructor(private _jsonp:Jsonp){
  }

  dzSearch(){
    console.log('Testing dzSearch() init');
    return this._jsonp.request('https://api.deezer.com/search/artist/?q=deftones&output=jsonp', {method:'Get'})
      .subscribe((res) => {
        console.log(res);
      });
  }
}

答案 1 :(得分:1)

您可以逐步构建完整的字符串,并记住每个步骤最后添加的内容:

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+..

答案 2 :(得分:0)

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

这将返回末尾没有..的字符串。如果您需要,请执行return '..'.join(l[1:]) + '..'

答案 3 :(得分:0)

你可以使用这样的东西。

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)

这是nested_increasing_additions的打印输出(4) 1 + .. 1 + 2 + ... 1 + 2 + 3 + 1 .. + 2 + 3 + 4 + .. 我认为它是自我解释的,没有什么复杂的。

答案 4 :(得分:0)

假设您确实希望每个返回字符串末尾的".."并且递归正常,这是一个解决方案:

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时,第一个返回和if(true)块结束递归调用。
  • 下半部分(else块)调用下一次迭代,n减1并且当前迭代的字符串构建(如果n!=1)。
  • 复杂的代码'%s+..' % '+'.join(str(i) for i in range(1, n+1))只是range函数生成的数字列表的串联,转换为字符串和"+.."
    • range(1, n+1)会返回一个以1开头的整数列表,直到n+1range(1,3)会产生[1,2]。这将传递给join,在每个数字之间放置一个+

答案 5 :(得分:0)

这是怎么回事:

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+..'