Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/88: Рейтинг темы: голосов - 88, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 07.09.2017
Сообщений: 35

Найти в списке два соседних элемента одного знака

10.09.2017, 12:59. Показов 17280. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан список чисел. Если в нем есть два соседних элемента одного знака, выведите эти числа. Если соседних элементов одного знака нет — не выводите ничего. Если таких пар соседей несколько — выведите первую пару.
Python
1
2
3
4
5
6
7
8
9
10
11
a = input()
b = a.split()
for i in range(len(b)):
    b[i] = int(b[i])
for i in range(1,len(b)):
    if (b[i] and b[i-1]) < 0:
        print(b[i],' ',b[i-1])
    elif b[i] and b[i-1] > 0:
        print(b[i],' ',b[i-1])
    else:
        pass
В чём ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2017, 12:59
Ответы с готовыми решениями:

Дан массив целых чисел. Если в нем есть два соседних элемента одного знака, выведите эти числа. Если соседних элементов
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; int const b = 100; ...

В числовом списке сложить каждые два соседних элемента
Помогите рекурсивно решить задачу(сижу на экзамене=) (f'(2 3 4 5 6 7)) пример работы ((5) (9) (13))

Написать программу adjacent(X,Y,Zs), определяющую два соседних элемента X и Y в списке Zs
ПОМОГИТЕЕЕ ПОЖАЛУЙСТА!!! Написать программу adjacent(X,Y,Zs), определяющую два соседних элемента X и Y в списке Zs.

14
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
10.09.2017, 16:42
if хоть и проверяет является ли выражение правдивым или ложным, использовать его нужно осторожно.

Python
1
if (b[i] and b[i-1]) < 0:
and в питоне возвратит значение последнего проверенного аргумента (т.е. не обязательно тру или фолс), в Вашем случае - значение второго операнда (b[i-1]), если первый операнд - тру, а потом if проверит его на предмет того, меньше ли он нуля.

то что вы хотите сделать -

Python
1
if b[i] < 0 and b[i-1] < 0:
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
11.09.2017, 12:59
Псевдокод:
Code
1
2
3
4
5
6
while not t and (i < len(список) - 1):
    if знак(список[i])) == знак(список[i + 1]):
        a1 = список[i]
        a2 = список[i + 1]
        t = True
    i += 1
t - указатель того, что два числа, имеющие один знак есть. Функцию знак можно написать так:
Code
1
2
3
sign(x) = 1,   если x > 0, 
sign(x) = -1, если x < 0, 
sign(x) = 0,   если x = 0
Добавлено через 5 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def sign(x):
  if x > 0:
    return 1
  elif x == 0:
    return 0
  else:
    return -1
 
Nums = (1, -2, -1, 1, -2, -6)
 
T = False
i = 0
 
while not T and (i < len(Nums) - 1):
  if sign(Nums[i]) == sign(Nums[i + 1]):
    print('Числа {0} и {1} имеют один и тот жа знак.'.format(Nums[i], Nums[i + 1]))
    T = True
  i += 1
0
0 / 0 / 0
Регистрация: 07.09.2017
Сообщений: 35
11.09.2017, 15:16  [ТС]
Спасибо,помогли)
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
11.09.2017, 16:59
Python
1
2
3
4
5
6
def sameSign(num1, num2):
    return (num1 > 0) == (num2 > 0)
 
 
if sameSign(a, b):
    ...
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.09.2017, 05:05
Volobuev Ilya, к чему лишние флаги?
Python
1
2
3
4
5
6
i = 0
while i < len(Nums) - 1:
  if sameSign(Nums[i], Nums[i + 1]):
    print('Числа {0} и {1} имеют один и тот жа знак.'.format(Nums[i], Nums[i + 1]))
    break
  i += 1
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
12.09.2017, 09:40
мы не ищем легких путей но все намного проще
Python
1
2
3
4
5
a = [int(i) for i in input().split()]
for i in range(len(a)-1):
    if a[i]*a[i+1] >0:
        print(a[i],a[i+1])
        break
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.09.2017, 10:32
Python
1
2
3
4
5
a = [int(i) for i in input().split()]
for i, j in zip(a[:-1], a[1:]):
    if i*j > 0:
        print(i, j)
        break
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
12.09.2017, 21:17
Не хотел пользоваться break, без break желал написать.

Добавлено через 1 минуту
Как мне кажется без break было бы красивее, даже если и чуть длиннее. Хотя, это лично мое мнение, и никто не обязан считать так же как и я.
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
12.09.2017, 21:19
а чем break не устраивает? пиши через while с флагом как предложено было выше
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
12.09.2017, 21:21
Мне говорили что использование break не желательно. Стараюсь без него теперь обходится.

Добавлено через 54 секунды
Мне кажется break лучше в цикле for использовать, если на то пошло.
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
12.09.2017, 21:25
так в коде так и используется. а кто тебе сказал break лучше не использовать? представь тебе надо в цикле в пару сотен тысяч найти один элемент который окажется ну допустим пятый. ты его получил в переменную а остальны элементы цикл продолжит перебирать без дела тратя время
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
12.09.2017, 21:35
Можно было бы создать переменную found, указывающую найден ли элемент. И поставить в условие цикла while эту переменную. Для меня бы этот вариант бы был наиболее красивым (но, тоже, смотря тут какая задача будет, иногда и break будет полезен, но не люблю им пользоваться, если с while можно без ущерба написать код). Хм, а почему ты любишь им пользоваться?

Добавлено через 1 минуту

Не по теме:

break учителя не советовали использовать. И уже привык без него обходиться.

0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
12.09.2017, 21:48
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Можно было бы создать переменную found, указывающую найден ли элемент. И поставить в условие цикла while
Python
1
2
3
4
5
6
7
8
9
found = True
i = 0
Nums = (1, -2, -1, 1, -2, -6)
 
while found and i < len(Nums) - 1:
  if Nums[i] *Nums[i + 1] > 0:
    print('Числа {} и {} имеют один и тот жа знак.'.format(Nums[i], Nums[i + 1]))
    found = False
  i += 1
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.09.2017, 07:53
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Как мне кажется без break было бы красивее, даже если и чуть длиннее. Хотя, это лично мое мнение, и никто не обязан считать так же как и я.
И тратить процессорное время на проверку флага? break и continue удобно использовать, особенно если с ними код становится быстрее и читать его проще.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2017, 07:53
Помогаю со студенческими работами здесь

Найти в массиве два соседних положительных элемента
Определите наличие в данном массиве два соседних положительных элемента.

Найти в массиве два соседних положительных элемента
Вывести первую пару и последнию пару. Pascal

В массиве X определить количество двух соседних элементов одного знака
В массиве X = {2; 1; -4; 3; 8; 9; 7; 0; -7; 12; 11; 6; -5; 4; 1} определить количество двух соседних элементов одного знака, причем модули...

Найти два соседних элемента массива, сумма которых максимальна
2.Данo массив размера N. Найти два соседних элемента, сумма которых максимальна, и вывести эти элементы.

Найти два соседних элемента массива, сумма которых максимальна
Дан массив размера N. Найти два соседних элемента, сумма которых максимальна, и вывести эти элементы в порядке возрастания их индексов. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru