Найти - Пользователи
Полная версия: Программа выводит часть последовательности с ошибкой
Начало » Python для новичков » Программа выводит часть последовательности с ошибкой
1 2
shaptmos
Beton
ежели я правильно понимаю логику происходящего, сначала происходит сложение строк внутри скобок, каждое значение полученной строки передается в список последовательно i раз.

Да
ну оно поэтому и не получится если использовать строки таким образом. возьмем i == 10, в скобках получаем “10 ”, в список передается сначала “1”, затем “0”, потом “ ” и так десять раз.
Beton
Еще раз спасибо огромное, все получилось.
Вот итоговый код:
a = int(input())
res = []
for i in range(1, a+1):
    temp_list = []
    temp_list += ([i] + ['']) * i
    res.extend(temp_list)
s = res[:a*2]
print(*s, sep = " ")

зы. Некоторые смогли решить задачу без списков, только циклами. Ну да ладно
py.user.next
>>> import itertools
>>> 
>>> def f(n):
...     g = (i for i in range(n + 1) for _ in range(i))
...     return itertools.islice(g, n)
... 
>>> print(*f(7))
1 2 2 3 3 3 4
>>>
shaptmos
Beton
зы. Некоторые смогли решить задачу без списков, только циклами. Ну да ладно
я уверен, что умение решать подобные задачи без списков очень им пригодится в дальнейшей деятельности.
Beton
py.user.next
py.user.next, спасибо. Общий принцип понятен, хотя def пока не проходили. Подразумевалось, что нужно решить задачу курса только пройденным материалом.

я уверен, что умение решать подобные задачи без списков очень им пригодится в дальнейшей деятельности.
Надеюсь что да
scidam
Нигде не обнаружил решения, использующего обращение формулы арифметической прогрессии; обращая формулу арифметической прогресии можно получить решение этой задачи почти в “одну строку” :

from math import sqrt
n = 5050
' '.join(sum([['%s' % i] * i for i in range(int((sqrt(1 + 8 * n) - 1) / 2.0) + 1)] +\
    [['%s' % (int((sqrt(1 + 8 * n) - 1) / 2.0) + 1,)] * (n - (int((sqrt(1 + 8 * n) - 1) / 2.0) + 1) * int((sqrt(1 + 8 * n) - 1) / 2.0) / 2)], []))

JOHN_16
scidam
Это тот случай когда не надо строить решение в одну строку. - У вас кучка повторяющегося кода. Сам код сложно читаемый. Вы привели плохой пример реализации задачи. На собеседовании, например, это будет ощутимый минус в результат собеседуемого.
JustForPython
def get_seq(up):
	res = []
	for i in range(1, up+1):
		res.extend([i]*i)
	return res
def work(count):
	return get_seq(count)[:count]
res = list(work(int(input('count: '))))
print(''.join([str(i) for i in res]))

Держи братиш
marvellik
Beton
Например, если n = 7, то программа должна вывести 1 2 2 3 3 3 4
может я не так понял условие но согласно примеру
a ='1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 '.split()
n = 7
print(*(a[:n]))
1 2 2 3 3 3 4
scidam
JOHN_16
Это тот случай когда не надо строить решение в одну строку….

Так специально старался всунуть все в одну строку, даже в ущерб DRY

Следующий код (без явных циклов) должен быть более понятен:

from math import sqrt
n = 3  # количество чисел 
m = int((sqrt(1 + 8 * n) - 1) / 2.0)
l = int(n - m * (m + 1) / 2)
res_array = list(map(lambda i: ['%s' % i] * i, range(m + 1)))
res_array += [['%s' % (m+1, )]* l]
print(' '.join(sum(res_array, [])))

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB