Найти - Пользователи
Полная версия: В чем ошибка?
Начало » Python для новичков » В чем ошибка?
1
Dorum
Доброго времени суток.
Необходимо вывести пары соседних друг с другом чисел одного знака.
Код написан, однако, код не выполняет нужную задачу. В чем моя ошибка?
 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
Пока это единственная идея, которая пришла мне в голову, чтобы ограничить перебор списка. Можно это сделать как-то проще? Чтобы перебор не выходил за пределы размера списка?

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

Это вот так?
 >>> 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)]
Dorum
Rodegast
> Необходимо вывести пары соседних друг с другом чисел одного знака. Это вот так?
Результат верный у Вас, но можно это расписать попроще? Без использования кортежей, словарей и тд.
Я не понимаю почему мое условие не выполняется, хотя он, как мне кажется, верное.
Dorum
 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

Может так будет более читабельно.
Rodegast
Ты должен перебирать пары, а не элементы списка по отдельности, тогда и с индексом проблем не будет. Что бы получить список пар используется функция 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)

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

Запусти его в отладчике и пройди его по шагам. Тогда всё станет понятным.
Dorum
Rodegast
Ты должен перебирать пары, а не элементы списка по отдельности, тогда и с индексом проблем не будет. Что бы получить список пар используется функция zip:
За функцию zip спасибо. По неопытности перепутал ее со словарями.
Кстати, ошибку нашел. Забыл об условии else. Необязательно перебирать парами
marvellik
 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])
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