Найти - Пользователи
Полная версия: списки и цикл for
Начало » Python для новичков » списки и цикл for
1
pavel13079
Напишите программу, на вход которой подаётся список чисел одной строкой. Программа должна для каждого элемента этого списка вывести сумму двух его соседей. Для элементов списка, являющихся крайними, одним из соседей считается элемент, находящий на противоположном конце этого списка. Например, если на вход подаётся список “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 цифры пожалуйста
Rafik
 if s[i]>0 and s[i]<l
Каким боком здесь сравнивается длина списка l и i-тое значение из списка? Обрати внимание на условие после and. Для чего условие, для элемента списка, больше 0 перед and? Если пользователь ввёл отрицательное число, то оно должно пропускаться? Про этот момент в условии задачи молчок.
pavel13079
Rafik
1 3 5 6 10
исправил,но все равно неправильно(
Rafik
Даю подсказку: есть хорошая встроенная функция 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.
Ещё надо поставить обработку для списка содержащего только один элемент.
evgeny_24
здравствуйте



evgeny_24
здравствуйте
имеется список значений
нужно построить его автокорреляцию со сдвигом 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)
FishHook
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))]
и что это такое?

evgeny_24
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]
AD0DE412
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
а то если честно просто мозг взорвали )
ззы блин это наверно тролинг такой … ну че зачетно

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