Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 20, 2015 21:56:44

shaptmos
Зарегистрирован: 2015-12-12
Сообщения: 27
Репутация: +  4  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

Beton
ежели я правильно понимаю логику происходящего, сначала происходит сложение строк внутри скобок, каждое значение полученной строки передается в список последовательно i раз.

Да
ну оно поэтому и не получится если использовать строки таким образом. возьмем i == 10, в скобках получаем “10 ”, в список передается сначала “1”, затем “0”, потом “ ” и так десять раз.

Офлайн

#2 Дек. 20, 2015 22:27:21

Beton
Зарегистрирован: 2015-09-24
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

Еще раз спасибо огромное, все получилось.
Вот итоговый код:

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

зы. Некоторые смогли решить задачу без списков, только циклами. Ну да ладно

Офлайн

#3 Дек. 21, 2015 02:20:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

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



Отредактировано py.user.next (Дек. 21, 2015 02:22:05)

Офлайн

#4 Дек. 21, 2015 07:56:03

shaptmos
Зарегистрирован: 2015-12-12
Сообщения: 27
Репутация: +  4  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

Beton
зы. Некоторые смогли решить задачу без списков, только циклами. Ну да ладно
я уверен, что умение решать подобные задачи без списков очень им пригодится в дальнейшей деятельности.

Офлайн

#5 Дек. 21, 2015 08:36:40

Beton
Зарегистрирован: 2015-09-24
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

py.user.next
py.user.next, спасибо. Общий принцип понятен, хотя def пока не проходили. Подразумевалось, что нужно решить задачу курса только пройденным материалом.

я уверен, что умение решать подобные задачи без списков очень им пригодится в дальнейшей деятельности.
Надеюсь что да

Офлайн

#6 Июнь 25, 2016 05:40:03

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

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

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)], []))

Отредактировано scidam (Июнь 25, 2016 05:42:34)

Офлайн

#7 Июнь 25, 2016 18:38:54

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

scidam
Это тот случай когда не надо строить решение в одну строку. - У вас кучка повторяющегося кода. Сам код сложно читаемый. Вы привели плохой пример реализации задачи. На собеседовании, например, это будет ощутимый минус в результат собеседуемого.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Июнь 25, 2016 20:25:06

JustForPython
Зарегистрирован: 2016-03-24
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

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

Держи братиш

Офлайн

#9 Июнь 25, 2016 21:43:30

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

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

Отредактировано marvellik (Июнь 25, 2016 21:44:06)

Офлайн

#10 Июнь 27, 2016 03:44:02

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Программа выводит часть последовательности с ошибкой

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, [])))

Отредактировано scidam (Июнь 29, 2016 03:56:53)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version