2015-11-02 55 views
-3

我解决它输入的二进制数和输出数组的一个问题应该是这样返回零数组在Python

[“白”,“红”]

它返回数组颜色。

现在我总共有两个问题。 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到循环内的空单因此,当循环退出时唯一离开的将是最后一个。

为了避免这种情况,不要这样做。