Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2020 08:57:39

pavel13079
Зарегистрирован: 2020-02-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

списки и цикл for

Напишите программу, на вход которой подаётся список чисел одной строкой. Программа должна для каждого элемента этого списка вывести сумму двух его соседей. Для элементов списка, являющихся крайними, одним из соседей считается элемент, находящий на противоположном конце этого списка. Например, если на вход подаётся список “1 3 5 6 10”, то на выход ожидается список “13 6 9 15 7” (без кавычек).

Если на вход пришло только одно число, надо вывести его же.

Вывод должен содержать одну строку с числами нового списка, разделёнными пробелом.
Sample Input 1:
1 3 5 6 10

Sample Output 1:
13 6 9 15 7

Мой код

 s=list(int(i) for i in input().split())
l=len(s)-1
for j in s:
    if s.index(j)==0:
        print(s[1]+s[-1],end=' ')
    elif s.index(j)==l:
        print(s[(len(s)-1)-1]+s[0],end=' ')
    else:
        for i in range(1,len(s)):
            if i<l:
                print(s[i-1]+s[i+1],end=' ')

Мой ввод
1 3 5 6 10

Мой вывод
13 6 6 6 7

Подскажите почему неправильно выводит 2 цифры пожалуйста

Отредактировано pavel13079 (Март 2, 2020 20:20:16)

Офлайн

#2 Март 2, 2020 10:22:55

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

списки и цикл for

 if s[i]>0 and s[i]<l
Каким боком здесь сравнивается длина списка l и i-тое значение из списка? Обрати внимание на условие после and. Для чего условие, для элемента списка, больше 0 перед and? Если пользователь ввёл отрицательное число, то оно должно пропускаться? Про этот момент в условии задачи молчок.

Отредактировано Rafik (Март 2, 2020 10:26:26)

Офлайн

#3 Март 2, 2020 20:21:05

pavel13079
Зарегистрирован: 2020-02-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

списки и цикл for

Rafik
1 3 5 6 10
исправил,но все равно неправильно(

Офлайн

#4 Март 3, 2020 07:58:45

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

списки и цикл for

Даю подсказку: есть хорошая встроенная функция enumerate. Пример использования со списком:

 >>> spis = [5,6,7,8,9]
>>> for i, v in enumerate(spis):
	print("Index", i, " Value", v)
	
Index 0  Value 5
Index 1  Value 6
Index 2  Value 7
Index 3  Value 8
Index 4  Value 9
Для твоего случая ориентируемся по индексу: если нулевой, то берём элементы i+1 и -1, если индекс равен последнему индексу L, то соответственно его алгоритм. Для остальных случаев элементы с индексом i-1 и i+1.
Ещё надо поставить обработку для списка содержащего только один элемент.

Офлайн

#5 Март 4, 2020 21:19:59

evgeny_24
Зарегистрирован: 2020-03-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

списки и цикл for

здравствуйте



Отредактировано evgeny_24 (Март 4, 2020 21:27:39)

Офлайн

#6 Март 4, 2020 21:27:14

evgeny_24
Зарегистрирован: 2020-03-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

списки и цикл for

здравствуйте
имеется список значений
нужно построить его автокорреляцию со сдвигом d:

задал функцию, но возвращаются одинаковые значения в результате

не могу определить ошибку
значения привожу условно:

 trace0 = list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10 , 11, 12, 13)
d = 3
def fac(trace, d):
    length_trace = int(len(trace))
    f_trace = [i*0 for i in range(d)]  # нулевая матрица размерности
    list_d = [i for i in range(len(f_trace))]
    list_d.reverse()
    b = copy.deepcopy(list_d)
    
    for k in b:
        for z in range(d):
            for i in range(length_trace - k - 1)
                    f_trace[z] += trace[i] * trace[i + k]
     return f_trace
trace1 = list(fac(trace0, d))
print(trace1)

Отредактировано evgeny_24 (Март 4, 2020 22:06:08)

Офлайн

#7 Март 4, 2020 22:12:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

списки и цикл for

evgeny_24
У вас бред в каждой строке.

 trace0 = list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10 , 11, 12, 13)
в каком учебнике вы прочитали, что в питоне список создается вот таким оригинальным способом?
 length_trace = int(len(trace))
длина списка может быть нецелым числом? каким образом?
 f_trace = [i*0 for i in range(d)]
интересно, что вы рассчитываете получить умножая что бы то ни было на ноль?
напишите программу из одной строчки
 print([i*0 for i in range(3)])
что у нас получилось?
 list_d = [i for i in range(len(f_trace))]
и что это такое?



Офлайн

#8 Март 4, 2020 22:31:51

evgeny_24
Зарегистрирован: 2020-03-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

списки и цикл for

FishHook
evgeny_24У вас бред в каждой строке.

эти расчеты до цикла сделаны, чтобы:
1. создать список f_trace где вместо нужных значений для каждого шага автокорреляции было значение ноль, а уже затем с помощью цикла вместо ноля присваивается нужное значение.
2. создать список list_d и индексами для перебора при расчете
3. length_trace = int(len(trace)) - это не попытка создать список, а определение длины заданной последовательности, которая также важна при расчете АКФ.

с вышеописанным у меня вопросов не возникло. соглашусь, что запись не ясная, но проблема возникла при написании цикла, когда каждый элемент списка f_trace должен быть выражен как сумма элментов trace и его сдвинутой копии. т.е.
 f_trace[z] += trace[i]*trace[i - k]

Отредактировано evgeny_24 (Март 4, 2020 22:33:29)

Офлайн

#9 Март 5, 2020 14:15:08

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

списки и цикл for

evgeny_24

срвните

 test = range(5)
sum1 = len(test)
sum2 = int(len(test))
print(1, sum1, type(sum1))
print(2, sum2, type(sum2))
по поводу
  f_trace = [i*0 for i in range(d)]
(troll=on)
у вас явно технический склад ума … чесно даже завидно нимного
рекомендую поискать работы Рыбникова Ю.С., Василенко С.Л. (в часностие теорию. множеств, и комплексые постстрва)
(troll=off)
 print(0 * 0)
print(1 * 0)
print(2 * 0)
зы если вам нужно было вот это
 f_trace = [0, 0, 0]
не проще ли было
 f_trace = [0] * 3
а то если честно просто мозг взорвали )
ззы блин это наверно тролинг такой … ну че зачетно



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Март 5, 2020 14:52:45)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version