總網頁瀏覽量

2024年3月14日 星期四

一些PYTHON的疑難雜症(Some difficult and complicated diseases of Python)

在Python中,整數列表與整數列表相比較,即使它們的內容相同,也不會返回 True,因為它們是不同的物件。
例如:
unpacked_data = [10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99] 
expected_data = [10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99]
response_data = [10000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99]
因此,即使 unpacked_data 和 expected_data 的內容相同,它們也不會被判斷為相等。 
以下程式片斷:
if  unpacked_data == expected_data: 
     packed_data_to_send = struct.pack('16i', *response_data)
     client_socket.sendall(packed_data_to_send)
     print('Sent', repr(response_data))
else:
     client_socket.sendall(b'ERROR DATA')
     print('Sent ERROR DATA') 

總是會執行else: client_socket.sendall(b'ERROR DATA')。 
解決方法是將3個列表(list)定義為元組(tuple)。元組可以與另一個元組比較,如果元組中的元素相同,則會返回 True。這樣一來,就可以使用 == 來比較 unpacked_data 和 expected_data,而不需要任何進一步的處理。
把列表[ ]改為元組( )就可解決。
unpacked_data = (10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99) 
expected_data = (10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99) 
response_data = (10000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99) 

註(note): 
串列(List): 
ex:    list=[01, 23, 45, 67, 89 ] 
元組(Tuple): 
ex:    number = (1, 2, 3 ,4 ,5)

沒有留言:

張貼留言

OnLine

counter