2016-11-16 2 views
-2

Определите функцию с именем nested_increasing_additions(n), которая получает одно положительное целое число (n) и возвращает строка, как показано в следующих примерах:Как это сделать? Если n равно 3, верните `1 + .. 1 + 2 + .. 1 + 2 + 3 + ..` "

Если 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 или loop для повторения n раз. Для первого цикла он возвращает 1+.., для второго цикла он возвращает 1+2.. каким-то образом (чего я не знаю) он останавливается на 2, который совпадает с временем повторения.

Я не знаю, правильно ли я думаю. Нужна помощь и объяснения! Спасибо!

+1

Не могли бы вы показать код? – Beri

+3

Почему ваша первая строка заканчивается '..', а вторая - нет? – Keiwan

ответ

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+.. 
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:]) + '..'

4

Последовательные оценки этих строк приводят к последовательности тетраэдрических чисел. Например, для ввода 5, выход принимает значение 35. Это число сфер, вам нужно будет построить тетраэдр с длиной стороны 5.

tetrahedron

Чтобы увидеть, как она относится к сумме в что дискретный «объем» тетраэдра будет равен сумме «срезов» треугольника сверху вниз.

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

"функция должна возвращать * строку *" акцент мой –

+4

Hah. Упс. Я получил [nerd-sniped] (https://xkcd.com/356/)! – wim

+0

@PatrickHaugh исправлено – wim

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 + .. я думаю, что это сам объяснительный, ничего сложный.

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


Объяснение :

  • Первый блок возврата и if (true) завершает рекурсивный вызов, когда значение переданного значения достигает 1 посредством вычитания из другой половины.
  • Вторая половина (еще блок) вызывает следующую итерацию с n, вычитаемым 1 и строкой строкой текущей итерации (если n!=1).
  • Сложная ищет код '%s+..' % '+'.join(str(i) for i in range(1, n+1)) просто стечение списка чисел, генерируемых функцией range, превращенный в строки и "+.."
    • range(1, n+1) возвращает список целых чисел, начиная с 1, пока n+1 так range(1,3) урожайности [1,2]. Это передается для соединения, которое помещает + между каждым числом.
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+..' 
Смежные вопросы