Найти - Пользователи
Полная версия: Программа выводит часть последовательности с ошибкой
Начало » Python для новичков » Программа выводит часть последовательности с ошибкой
1 2
Beton
Привет!
Решаю задачу с курса, и возникла вот такая оказия. Условия задачи:
Напишите программу, которая выводит часть последовательности 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”.
Как этого избежать?
Спасибо!
shaptmos
Код сыпется на входном числе 47 (например), то есть с того момента, когда появляются “10”, которые разбиваются на “1” и “0”.
Как этого избежать?

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

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

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

Beton
тогда проблем не должно возникнуть
В таком случае на выходе тоже получается список, а необходимо чтобы были числа
vrabey
Beton
получается список, а необходимо чтобы были числа
имеете ввиду строка должна получиться?
методом join “склеить” можно послдедовательность
shaptmos
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
Beton
Спасибо ответившим. Но я продолжаю тупить
Код переписан, но продолжает оставаться прежняя проблема с “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 = ' ')
vrabey
shaptmos
собирать данные не в виде строки, а в виде списка
Beton
Код переписан, но продолжает оставаться прежняя проблема
так внутри цикла вы по по прежнему работает со строкой
a = int(input())
result = []
for i in range(1, a+1):
    temp_list = []
    temp_list += [i] * i

не создавать строку, а добавлять в список
а потом готовый список уже выводить в нужном виде
shaptmos
Beton
Код переписан, но продолжает оставаться прежняя проблема с “10” и “1” и “0”.

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

ежели я правильно понимаю логику происходящего, сначала происходит сложение строк внутри скобок, каждое значение полученной строки передается в список последовательно i раз.
vrabey
a = int(input(">> "))
result = []
for n in range(1, a + 1):
    seq = [n] * n      #  создать последовательность из n
    result.extend(seq) # добавить seq в результирующий список
print(*result, sep=" ")  # вывести результат
Beton
ежели я правильно понимаю логику происходящего, сначала происходит сложение строк внутри скобок, каждое значение полученной строки передается в список последовательно i раз.
Да
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