2015-11-02 78 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到循環內的空單因此,當循環退出時唯一離開的將是最後一個。

爲了避免這種情況,不要這樣做。