Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 20, 2015 16:12:13

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

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

Привет!
Решаю задачу с курса, и возникла вот такая оказия. Условия задачи:
Напишите программу, которая выводит часть последовательности 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.

Мой код:

n = int(input())
b = ''
for i in range(0, n+1):
    b += (str(i) + ' ')*i
    c = (b[0:n *2])
print(c)

Код сыпется на входном числе 47 (например), то есть с того момента, когда появляются “10”, которые разбиваются на “1” и “0”.
Как этого избежать?
Спасибо!

Офлайн

#2 Дек. 20, 2015 19:01:02

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

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

Код сыпется на входном числе 47 (например), то есть с того момента, когда появляются “10”, которые разбиваются на “1” и “0”.
Как этого избежать?

собирать данные не в виде строки, а в виде списка, наверное. для примера:

first_list = [41,42,43]
second_list = []
for arg in first_list:
    second_list += str(arg) * 3
print(second_list)

тогда проблем не должно возникнуть

Офлайн

#3 Дек. 20, 2015 19:36:44

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

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

тогда проблем не должно возникнуть
В таком случае на выходе тоже получается список, а необходимо чтобы были числа

Офлайн

#4 Дек. 20, 2015 19:48:03

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

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

Beton
получается список, а необходимо чтобы были числа
имеете ввиду строка должна получиться?
методом join “склеить” можно послдедовательность

Офлайн

#5 Дек. 20, 2015 20:15:55

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

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

Beton
В таком случае на выходе тоже получается список, а необходимо чтобы были числа

так список можно распаковать.

second_list = ['1', '1', '1', '2', '2', '2', '3', '3', '3']
for arg in second_list:
    print(int(arg), end =' ')
1 1 1 2 2 2 3 3 3

Офлайн

#6 Дек. 20, 2015 20:44:28

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

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

Спасибо ответившим. Но я продолжаю тупить
Код переписан, но продолжает оставаться прежняя проблема с “10” и “1” и “0”.

a = int(input())
b = []
for i in range(1, a+1):
    b += (str(i) + ' ') * i
c = b[0:a*2]
print(''.join(c), end = ' ')

Офлайн

#7 Дек. 20, 2015 21:09:15

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

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

shaptmos
собирать данные не в виде строки, а в виде списка
Beton
Код переписан, но продолжает оставаться прежняя проблема
так внутри цикла вы по по прежнему работает со строкой
a = int(input())
result = []
for i in range(1, a+1):
    temp_list = []
    temp_list += [i] * i

не создавать строку, а добавлять в список
а потом готовый список уже выводить в нужном виде

Офлайн

#8 Дек. 20, 2015 21:34:50

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

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

Beton
Код переписан, но продолжает оставаться прежняя проблема с “10” и “1” и “0”.

b += (str(i) + ' ') * i

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

Офлайн

#9 Дек. 20, 2015 21:38:52

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

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

a = int(input(">> "))
result = []
for n in range(1, a + 1):
    seq = [n] * n      #  создать последовательность из n
    result.extend(seq) # добавить seq в результирующий список
print(*result, sep=" ")  # вывести результат

Отредактировано vrabey (Дек. 20, 2015 21:41:53)

Офлайн

#10 Дек. 20, 2015 21:43:21

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

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

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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version