Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 3, 2014 21:20:04

simpla
Зарегистрирован: 2014-04-03
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

Здравствуйте, уважаемые!
Хотелось бы посоветоваться с вами, может вы объясните, что я делаю не правильно.
Я прохожу курс основ программирования, обучение идет на питоне. Пытаюсь сделать простое ветвление, используя в качестве условия истинность выражения, но в результате происходит все наоборот.
Что я имею в виду:
Я создал переменную, присвоил ей значение 1. Проверил, что моя переменная действительно больше нуля. Питон подтверждает, что да:
>>> per1 = 1
>>> per1 > 0
True
Далее, пытаюсь сделать ветвление, используя в качестве условия истинность этого самого сравнения, но условие не срабатывает:
>>> if per1 > 0 == True:
print(“very good”)


>>>
Если же я меняю в условии True на False, то все работает нормально:
>>> if per1 > 0 == False:
print(“very good”)


very good
>>>
Но где здесь логика? Ведь моя переменная больше нуля, это истина, сам питон это подтверждает. Почему же тогда в условии все работает наоборот?
Помогите разобраться, в чем ошибка? Я что-то делаю неправильно? Только не ругайтесь, я совсем-совсем новичок в программировании.

Офлайн

#2 Апрель 3, 2014 21:31:26

Qficer
Зарегистрирован: 2014-04-03
Сообщения: 5
Репутация: +  1  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

per1 > 0 == False
Тем самым Вы заносите в переменную сравнение ‘0 == False’ и получаете ответ - ноль не равен значению ‘False’

Простой пример:

a = 100 == 1000
print (a)
False

PS
То есть Вы сперва присваиваете переменной значение сравнения ‘100 == 1000’ и в переменную заносится значение - ‘False’
>>> 100 == 1000
False
>>> a = 100 == 1000
>>> print (a)
False

Отредактировано Qficer (Апрель 3, 2014 21:40:36)

Офлайн

#3 Апрель 3, 2014 21:49:07

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.


>>> if per1 > 0 == True: 

Перевожу: если False (0 - это False) меньше True и одновременно с этим равно True вернуть True, иначе вернуть False.
Естественно возвращается False.

Но стоит только расставить скобки:
>>> if (perl1 > 0) == True:

Перевожу если True (1) больше False(0) вернуть True, если True равно True вернуть True.

А вообще так не пишут, пишут так:
>>>if perl1:
Или на худой случай так (если по каким-то соображениям переменная может быть отрицательная и это нужно учитывать):
>>>if perl1 > 0:


Офлайн

#4 Апрель 3, 2014 21:52:30

simpla
Зарегистрирован: 2014-04-03
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

Но ведь я даже нигде здесь не использую слово False. И потом, если проверить, то никакого нового значения ей не присваивалось. Как была, так и осталась 1. Тем не менее, условие не срабатывает.
>>> per1 = 1
>>> if per1 > 0 == True:
print(“very good”)


>>> print(per1)
1
>>>

Еще я заметил такую штуку. Если в сравнении я не использую ноль, то все работает так, как я хочу.
>>> per2 = 2
>>> if per2 > 1 == True:
print(“Very good”)


Very good
>>>
Получается, что вся проблема именно в нуле? Почему это так получается?

Офлайн

#5 Апрель 3, 2014 22:00:18

simpla
Зарегистрирован: 2014-04-03
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

Alen

Со скобками действительно получилось!)
>>> if (per1 > 0) == True:
print(“very good”)


very good
>>>

Офлайн

#6 Апрель 3, 2014 22:01:25

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

simpla
Но ведь я даже нигде здесь не использую слово False.

0 и есть False, почти всё остальное – True.

Офлайн

#7 Апрель 3, 2014 22:03:15

Qficer
Зарегистрирован: 2014-04-03
Сообщения: 5
Репутация: +  1  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

simpla
Но ведь я даже нигде здесь не использую слово False. И потом, если проверить, то никакого нового значения ей не присваивалось. Как была, так и осталась 1. Тем не менее, условие не срабатывает.>>> per1 = 1>>> if per1 > 0 == True: print(“very good”)

Но ведь тем самым Вы сравниваете значение переменной равной 1, с значением выражения (0 == True), а значение выражения равно ‘False’ (так как синтаксис языка приравнивает значение ‘True’ к 1, а значение ‘False’ к 0)
>>> a = (1 == True)
>>> a
True
>>> a = (0 == False)
>>> a
True
>>> 

Отредактировано Qficer (Апрель 3, 2014 22:04:16)

Офлайн

#8 Апрель 3, 2014 22:08:15

simpla
Зарегистрирован: 2014-04-03
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

Qficer
Я понял. Я не совсем адекватно объяснил компьютеру, что я от него хочу. Правильно расставленные скобки вернули все на свои места.

Отредактировано simpla (Апрель 3, 2014 22:08:57)

Офлайн

#9 Апрель 3, 2014 22:10:26

simpla
Зарегистрирован: 2014-04-03
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

Alen
Понятно, это и объясняет, почему именно с нулем у меня не сработало. Спасибо всем!

Офлайн

#10 Апрель 3, 2014 22:34:06

simpla
Зарегистрирован: 2014-04-03
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Не понимаю, в чем логика.

Кстати, извините за оффтоп, но может кто-нибудь подскажет, как правильно вставлять в сообщения куски с кодом, чтобы получалось как у людей?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version