profile
Размещено 4 года назад по предмету Информатика от platon1108

S= list(map(int, input().split()))
N=S
for i in range (1,len(N),2):
N[i]=S[-(i+1)]
print(N)

Программа должна вывести список чисел, где четные позиции не меняются, а нечетные "зеркалятся". Не понимаю в чём у меня ошибка. По моей задумке список S остается неизменным в течении всей программы, но в реальности она всегда становится равной списку N. Почему так происходит (ведь я приравнял строки в начале программы, после они могут быть разными) и как исправить проблему?

  1. Ответ на вопрос
    Ответ на вопрос дан nubpolymaster

    Во-первых, если я правильно понял слово "зеркалиться", то элементы не зеркалятся, так как их нужно менять местами: n[i], s[-(i+1)] = s[-(i+1)], n[i]. Но может тут я не прав, так как не уверен по поводу слово "зеркалиться".

    А во-вторых, список S и N после приравнивания начинают ссылаться на один и тот же объект в памяти. Если нужно иметь именно копию списка, то нужно написать: n = list(s) или n = s.copy() или n = s[:].

    1. Ответ на вопрос
      Ответ на вопрос дан platon1108
      Спасибо большое, действительно, Вы правы насчёт копии списка. Зеркалиться- заменить первое число на последнее, второе на предпоследнее и т.д. Вроде у меня всё работает.
    2. Ответ на вопрос
      Ответ на вопрос дан poznayka20
      СУПЕР!!!
  2. Ответ на вопрос
    Ответ на вопрос дан KnowsUser1

    Ответ:

    List в Python является ссылочным типом. В вашей программе имена S и N по сути ссылаются на один и тот же объект в памяти. По какой бы ссылке вы к нему не обратились, вы будете изменять один и тот же объект, что, естественно, приведёт к подобному поведению.

    Что бы имя N ссылалось на копию объекта S в памяти, вызовите метод .copy() для S на строке N = S:

    N = S.copy()

    Так же, обращение по индексу S[-(i+1)] будет обращаться как раз таки к элементам под нечётными индексами (т.к при индексации листа с "головы" индексы идут с 0, а с "хвоста" - с -1), и на выходе вы так же получите абсолютно хаотическую перестановку элементов

    Например, рабочий вариант:

    S= list(map(int, input().split()))

    N=S.copy()

    for i in range (1,len(N),2):

       N[i]=S[-i]

    print(N)

    >>> 4 5 6 7 8 9

    >>> 4 9 6 7 8 5 #Как видим, элементы с нечётными индексами расположены в обратном порядке относительно изначального списка, в то время как чётные индексы идут в том же порядке.

    1. Ответ на вопрос
      Ответ на вопрос дан platon1108
      Ваше решение не подходит для случаев, когда чисел нечётное количество. К примеру, тест 1 2 3 4 5. Выводится 1 5 3 3 5.
    2. Ответ на вопрос
      Ответ на вопрос дан platon1108
      Да, именно поэтому пришлось использовать дополнительное условие. If len (N)%2==0: N[i]=S[-i] else: N[i]=S[-(i+1)]
    3. Ответ на вопрос
      Ответ на вопрос дан KnowsUser1
      В целом да, но постоянный вызов len(N) будет немного замедлять работу программы
    4. Ответ на вопрос
      Ответ на вопрос дан platon1108
      Вот поэтому я и сказал, что мой способ не совсем эффективный...
    5. Ответ на вопрос
      Ответ на вопрос дан poznayka20
      Способ не очень ефективен!
    6. Ответ на вопрос
      Ответ на вопрос дан poznayka20
      :(
    7. Ответ на вопрос
      Ответ на вопрос дан AnyaPokrov
      Здравствуйте помогите пожалуйста с информатикой он уже задан заранее благодарю даю 50 баллов
Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 5 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.