2015-11-02 2 views
-3

Я решить проблему, которая вводит массив двоичных чисел и вывод должен что-то вродеВозвращение всухую массива в Python

[ «Белый», «Red»]

Он возвращает массив цвет.

Сейчас у меня есть две проблемы. 1. В for rgb_code in hexcodes_array: предполагается, что он повторяется дважды, потому что я вводил два числа, но это только итерация последнего элемента прямо сейчас.

  1. for rgb_code in hexcodes_array: просто возвращает массив nil прямо сейчас, когда я проверил, он возвращает значение из операторов if.

Мои коды, как показано ниже:

def extract_number(number): 
    number_in_string = str(number) 
    red = number_in_string[:8] 
    green = number_in_string[8:16] 
    blue = number_in_string[16:24] 
    return [int(red, 2), int(green, 2), int(blue, 2)] 


def ambiguity_identifier(number, array): 
    for item in array: 
     count = 0 
     if item == number: 
      count = count + 1 
    return count 


def ClosestColor(hexcodes): 
    array = [] 
    for item in hexcodes: 
     hexcodes_array = [] 
     hexcodes_array.append(extract_number(item)) 

    for rgb_code in hexcodes_array: 
     print(rgb_code) 
     distance_black = ((rgb_code[0] - 0)**2 + (rgb_code[1] - 0)**2 + (rgb_code[2] - 0)**2) 
     distance_white = ((rgb_code[0] - 255)**2 + (rgb_code[1] - 255)**2 + (rgb_code[2] - 255)**2) 
     distance_red = ((rgb_code[0] - 255)**2 + (rgb_code[1] - 0)**2 + (rgb_code[2] - 0)**2) 
     distance_green = ((rgb_code[0] - 0)**2 + (rgb_code[1] - 255)**2 + (rgb_code[2] - 0)**2) 
     distance_blue = ((rgb_code[0] - 0)**2 + (rgb_code[1] - 0)**2 + (rgb_code[2] - 255)**2) 
     distance_array = [distance_black, distance_blue, distance_green, distance_red, distance_white] 
     lowest_number = min(distance_array) 
     if ambiguity_identifier(lowest_number, distance_array) > 1: 
      array.append("Ambiguous") 
     elif distance_black == lowest_number: 
      array.append("Black") 
     elif distance_white == lowest_number: 
      array.append("White") 
     elif distance_red == lowest_number: 
      array.append("Red") 
     elif distance_green == lowest_number: 
      array.append("Green") 
     elif distance_blue == lowest_number: 
      array.append("Blue") 
    return array 



if __name__ == '__main__': 
    ClosestColor([101111010110011011100100, 110000010101011111101111]) 

Могу ли я получить какие-либо советы по этому поводу? Благодаря

+0

'для элемента в шестнадцатеричных кодах:' этот цикл тоже странный – njzk2

+0

, просто запустите шаг за шагом, и вы быстро поймете, почему ваша функция может возвращать только 1 элемент. – njzk2

+0

Каждый раз в цикле вы каждый раз меняете свой 'hexcodes_array'. Кроме того, ваше представление цветов в виде десятичных чисел, содержащих только 0 или 1, является _extremely_ странным; почему не только как бинарные литералы ('0b101 ...'), двоичные строки '' 101'' или как обычные шестнадцатеричные цвета ('# ff0000')? – nneonneo

ответ

3

Ну, причина вы только получаете последний элемент в массиве ясно:

for item in hexcodes: 
    hexcodes_array = [] 
    hexcodes_array.append(extract_number(item)) 

Вы перезагружаем hexcodes_array пустой список внутри цикла. Таким образом, естественно, что единственный, оставшийся после выхода петли, будет последним.

Чтобы этого избежать, не делайте этого.

Смежные вопросы