Уведомления

Группа в Telegram: @pythonsu

#1 Март 4, 2020 19:11:56

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

В чем ошибка?

Доброго времени суток.
Необходимо вывести пары соседних друг с другом чисел одного знака.
Код написан, однако, код не выполняет нужную задачу. В чем моя ошибка?

 first = [-1, -2, 3, 4, -1] #список
n = 0
for d in first: #перебирает все числа в списке
    if n == len(first) - 1: #условие, чтобы индекс не выходил за пределы размера списка
        continue
    elif first[n] and first[n + 1] >= 0: #блок условия
        print(first[n], first[n + 1], sep=" and ")
        n += 1
    elif first[n] and first[n + 1] < 0: #блок условия
        print(first[n], first[n + 1], sep=" and ")
        n += 1

P.S
 if n == len(first) - 1:
        continue
Пока это единственная идея, которая пришла мне в голову, чтобы ограничить перебор списка. Можно это сделать как-то проще? Чтобы перебор не выходил за пределы размера списка?

Заранее спасибо.

Отредактировано Dorum (Март 4, 2020 19:45:41)

Офлайн

#2 Март 4, 2020 19:37:45

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

В чем ошибка?

> Необходимо вывести пары соседних друг с другом чисел одного знака.

Это вот так?

 >>> first = [-1, -2, 3, 4, -1]
>>> [ (x,y) for x,y in zip(first, first[1:]) if x>0 and y>0 or x<0 and y<0 ]
[(-1, -2), (3, 4)]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Март 4, 2020 19:45:13

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

В чем ошибка?

Rodegast
> Необходимо вывести пары соседних друг с другом чисел одного знака. Это вот так?
Результат верный у Вас, но можно это расписать попроще? Без использования кортежей, словарей и тд.
Я не понимаю почему мое условие не выполняется, хотя он, как мне кажется, верное.

Офлайн

#4 Март 4, 2020 19:48:34

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

В чем ошибка?

 first = [-1, -2, 3, 4, -1] #список
n = 0
for d in first: #перебирает все числа в списке
    if n == len(first) - 1: #условие, чтобы индекс не выходил за пределы размера списка
        continue
    elif first[n] >= 0 and first[n + 1] >= 0 or first[n] < 0 and first[n + 1] < 0: #блок условия
        print(first[n], first[n + 1], sep=" and ")
        n += 1

Может так будет более читабельно.

Офлайн

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

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

В чем ошибка?

Ты должен перебирать пары, а не элементы списка по отдельности, тогда и с индексом проблем не будет. Что бы получить список пар используется функция zip:

 >>> first = [-1, -2, 3, 4, -1,-5]
>>> list(zip(first, first[1::]))
[(-1, -2), (-2, 3), (3, 4), (4, -1), (-1, -5)]
В итоге код станет тривиальным.
 for x,y in zip(first, first[1::]):
     if x>0 and y>0 or x<0 and y<0:
         print(x,y)

> Я не понимаю почему мое условие не выполняется, хотя он, как мне кажется, верное.

Запусти его в отладчике и пройди его по шагам. Тогда всё станет понятным.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Март 4, 2020 20:46:36)

Офлайн

#6 Март 4, 2020 23:12:58

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

В чем ошибка?

Rodegast
Ты должен перебирать пары, а не элементы списка по отдельности, тогда и с индексом проблем не будет. Что бы получить список пар используется функция zip:
За функцию zip спасибо. По неопытности перепутал ее со словарями.
Кстати, ошибку нашел. Забыл об условии else. Необязательно перебирать парами

Офлайн

#7 Март 6, 2020 19:38:15

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

В чем ошибка?

 if x>0 and y>0 or x<0 and y<0:
проще
 if x * y > 0 :
хотите с индексами без zip
 first = [-1, -2, 3, 4, -1]
for i in range(len(first) - 1):
    if first[i] * first[i+1] > 0 :
        print(first[i], first[i+1])

Отредактировано marvellik (Март 6, 2020 19:38:56)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version