Код игнорирует мой оператор if? Не уверен, почему этот код не работает

Поэтому я пытаюсь инвертировать черный и белый цвета в QR-коде.
Мой код работает для изображений, которые уже являются строго белыми и черными: значения RBG 0,0,0 и 255,255,255.
Но это не удается. работайте для другого изображения, которое имеет немного асимметричный белый и черный: 21,21,21 и 243,243,243.
Выполнение моего кода на слегка асимметричном изображении сделает все изображение строго белым.
Мой код принимает значение каждого канала и если какой-либо из них превысит 140, он станет белым. Почему немного не черный, а 21,21,21 становится белым?

def invert(smallPicture):

for pixel in getPixels(smallPicture):
  valueRed = getRed(pixel)
  valueGreen = getGreen(pixel)
  valueBlue = getBlue(pixel)

  if (valueRed or valueBlue or valueGreen > 140):
     setColor(pixel, white)
  else:
     setColor(pixel, black)

return smallPicture

Я использую Jython в JES 4.3.

Спасибо!


person jeffbobmate    schedule 02.04.2016    source источник
comment
Вы захотите снова сравнить каждую переменную 140if (valueRed > 140 or valueBlue > 140 or ...). Связано: Как проверить одну переменную на соответствие нескольким значениям?   -  person Jonathan Lonowski    schedule 02.04.2016


Ответы (1)


В вашем коде Python проверял, оценивается ли valueRed как True, или если valueGreen оценивается как True, или если valueBlue больше 140. Python не сравнивает каждую переменную в условном выражении if со 140: вместо этого вам нужно переписать каждое сравнение, разделенное операторами or. . Затем Python будет запускать каждое сравнение и оценивать либо True, либо False, в зависимости от того, соответствует ли значение цвета сравнению или нет.

Вы захотите заменить свои условные операторы следующим:

if (valueRed > 140 or valueBlue > 140 or valueGreen > 140):
    setCoor(pixel, white)
else:
    setColor(pixel, black)
person zvyn    schedule 02.04.2016
comment
Ага! Я был в тупике, но ваш ответ имеет смысл. Спасибо. - person jeffbobmate; 02.04.2016