Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 26, 2016 13:29:21

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

Списки

Доброго времени суток!
Условие задачи: Дан список чисел. Если в нем есть два соседних элемента одного знака, выведите эти числа.
Если соседних элементов одного знака нет - не выводите ничего.
Решени:

 list = input("Введите n - количество чисел разных знаков через пробел = ").split(" ")
print(list)
for i in range(len(list)):
    if list[i] > "0" and list[i - 1] > "0" and i != 0:
        print(list[i], list[i - 1])
    elif list[i] < "0" and list[i - 1] < "0" and i != 0:
        print(list[i], list[i - 1])
Вопрос:
Мой код работает, но меня интересует следующий вопрос: как происходит сравнение чисел в строках? Дело в том, что если в условии сравнивать i с 0, то будет выбиваться ошибка, ибо нельзя сравнивать str с int.
P.S Я бы мог задать список чисел изначально, но хотел реализовать это через ввод с клавиатуры.

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

Отредактировано Dorum (Ноя. 26, 2016 13:44:59)

Офлайн

#2 Ноя. 26, 2016 14:02:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Списки

Числа в виде строк можно привести к обычным числам

 i = "0"
int_i = int(i)
float_i = float(i)



Офлайн

#3 Ноя. 26, 2016 14:06:56

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

Списки

FishHook
Числа в виде строк можно привести к обычным числам
Обратите внимание на мой код. Я задаю n-ое количество цифр, которое в дальнейшем преобразуется в список с элементами типа str.

Отредактировано Dorum (Ноя. 26, 2016 14:26:01)

Офлайн

#4 Ноя. 26, 2016 14:33:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Списки

Dorum
Обратите внимание на мой код. Я задаю n-ое количество цифр, которое в дальнейшем преобразуется в список с элементами типа str.
Да вижу я ваш код, ничего подобного в нем не происходит.
Давайте упростим задачу, вам нужно ввести с клавиатуры набор чисел и получить из них список.
Показывайте решение.



Офлайн

#5 Ноя. 26, 2016 14:39:52

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

Списки

FishHook
 list = []
while len(list) != 5:
    n = int(input("Введите число = "))
    list.append(n)
print(list)

Офлайн

#6 Ноя. 26, 2016 14:44:05

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Списки

Отлично, список есть. Теперь используйте это решение, чтобы получить решение основной задачи. Только бога ради, не называйте переменную list - это же зарезервированное слово.



Офлайн

#7 Ноя. 26, 2016 15:08:43

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

Списки

FishHook
Отлично, список есть. Теперь используйте это решение, чтобы получить решение основной задачи. Только бога ради, не называйте переменную list - это же зарезервированное слово.
Свое первоначально решение, которое указано в посте номер 1, я использовал как альтернативное. И меня заинтересовал вопрос сравнение строк, то есть могу ли я сравнить “1” и “0”?
Например,
“1” > “0” - True
Но вот, например, “1000” > “999” - False

Отредактировано Dorum (Ноя. 26, 2016 15:19:18)

Офлайн

#8 Ноя. 26, 2016 15:14:05

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

Списки

И будьте добры ответить еще на один вопрос.
Полное условие задачи звучит так: Дан список чисел. Если в нем есть два соседних элемента одного знака, выведите эти числа. Если соседних элементов одного знака нет - не выводите ничего. Если таких пар соседей несколько - выведите первую пару.
Решение:

 list = []
while len(list) != 5:
    list1 = int(input("Введите число = "))
    list.append(list1)
print(list)
a = []
for i in range(len(list)):
    if list[i] > 0 and list[i - 1] > 0 and i != 0:
        a.append(list[i])
        a.append(list[i - 1])
        #print(list[i], list[i - 1])
    elif list[i] < 0 and list[i - 1] < 0 and i != 0:
        a.append(list[i])
        a.append(list[i - 1])
        #print(list[i], list[i - 1])
print(a[0], a[1], sep=" и ")
Вопрос следующий:
Если нет соседних элементов одного знака, то, собственно, как вывести ничего? То есть, чтобы результат был пуст. Ибо из-за моего print(a, a, sep=“ и ”) в случае отсутствия пар выбивается ошибка.

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

Отредактировано Dorum (Ноя. 26, 2016 15:18:52)

Офлайн

#9 Ноя. 26, 2016 15:19:40

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Списки

Dorum
Но вот, например, “1000” > “999” - False
Очевидно, что строки - это не цифры. Они сравниваются как строки, то есть предметом сравнения является код символа, а не его семантическое значение. В приведенном вами примере символ “1” меньше чем “9”, потому что стоит раньше в таблице символов. С таким же успехом можете сравнивать “a” < “z”, “sdfsdaf” > “dsfknjsdflkjn”. Если хотите сравнивать числа, содержащиеся в строке, то превратите сначала строку в число.



Офлайн

#10 Ноя. 26, 2016 15:24:50

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Списки

Dorum
как вывести ничего
Вопрос аналогичный “как сделать ничего”.
- Если анализы будут положительными, то я застрелюсь.
- А если отрицательными?
- Ничего не буду делать.
Вероятно, с “ничего не делать” в быту у вас проблем не возникает?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version