Нужна помощь в решении задачи(осталось чуть-чуть)
Вот задача: Напишите программу, которая выводит часть последовательности 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 ... (число повторяется столько раз, чему равно). На вход программе передаётся неотрицательное целое число n — столько элементов последовательности должна отобразить программа. На выходе ожидается последовательность чисел, записанных через пробел в одну строку.
Например, если n = 7, то программа должна вывести 1 2 2 3 3 3 4.
Sample Input: 7
Sample Output: 1 2 2 3 3 3 4
Вот мой код:
x = input()
p = int(x)+1
d = 0
for i in range(1, p):
s = str(i)
d = i
if i != p:
print(s * d, end=' ')
elif i == p:
break
My input: 7 My output: 1 22 333 4444 55555 666666 7777777
ЧТО НУЖНО СДЕЛАТЬ: Я хотел бы понять как вывести 1 2 2 3 3 3 4
Ответы (2 шт):
Ленивый вариант:
Нужно считать количество элементов и завершать цикл при достижении предела:
n = 7
number = 0
for i in range(1, n + 1):
for j in range(i):
print(i, end=' ')
number += 1
if number >= n:
break
if number >= n:
break
Тоже самое через функцию:
def foo(n):
number = 0
for i in range(1, n + 1):
for j in range(i):
print(i, end=' ')
number += 1
if number >= n:
return
n = 7
foo(n)
Короткий вариант:
В этом случае сгенерируем последовательность чисел и заполним список, после возьмем срез от списка на количество элементов:
n = 7
items = []
for i in range(1, n + 1):
items += [i] * i
print(items[:n])
# [1, 2, 2, 3, 3, 3, 4]
x = int(input())
for i in range(1, x + 1):
for j in range(1, 1 + min(x, i)):
print(i, end=' ')
x -= i