2天前,我開始將轉換器字串編碼為十六進制。現在我有那個代碼
HEXV = {"A":"41","a":"","B":"42","b":"","C":"43","c":"","D":"44","d":"","E":"45","e":"","F":"46","f":"","G":"47","g":"","H":"48","h":"","I":"49","i":"","J":"","j":"","K":"","k":"","L":"","l":"","M":"","m":"","N":"","n":"","O":"","o":"","P":"","p":"","Q":"","q":"","R":"","r":"","S":"","s":"","T":"","t":"","U":"","u":"","V":"","v":"","W":"","w":"","X":"","x":"","Y":"","y":"","Z":"","z":""}
CHAR = []
def loop():
n = 0
if CHAR[n] in HEXV:
print(HEXV.get(CHAR[n]))
n = 1
i = input(str('Insert Phrase:'))
l = list(i)
CHAR.append(l)
loop()
有那個錯誤
C:\Users\Pc\AppData\Local\Programs\Python\Python39>C:/Users/Pc/AppData/Local/Programs/Python/Python39/python.exe "c:/Users/Pc/AppData/Local/Programs/Python/Python39/codes/HEXCODE Converter.py"
Insert Phrase:A
Traceback (most recent call last):
File "c:\Users\Pc\AppData\Local\Programs\Python\Python39\codes\HEXCODE Converter.py", line 16, in <module>
loop()
File "c:\Users\Pc\AppData\Local\Programs\Python\Python39\codes\HEXCODE Converter.py", line 7, in loop
if CHAR[n] in HEXV:
TypeError: unhashable type: 'list'
無論我更改它不能解決的代碼。我已經瀏覽過它,但我無法解決它,如果你能幫助我,我將不勝感激
uj5u.com熱心網友回復:
input回傳一個字串
> i = input('Insert Phrase:')
> Insert Phrase:A
> i
'A'
你列了一個清單
> l = list(i)
> l
['A']
然后將其附加到串列中CHAR
> CHAR = []
> CHAR.append(l)
> CHAR
[['A']]
因此,在您的函式loop (實際上并沒有回圈)中,您訪問的第 n 個值將始終為 0,因為您沒有回圈:
> n = 0
> CHAR[n]
['A']
而且串列是不可散列的,所以
> CHAR[n] in HEXV
# which is actually this
> ['A'] in HEXV
給你錯誤。
您可以做的是使用CHAR.extend(l)而不是CHAR.append(l)將實際串列傳遞給回圈。但是你需要重新評估你的代碼,因為我不相信這會做你真正想做的事情。
uj5u.com熱心網友回復:
我將以一種希望能幫助您識別您所詢問的具體錯誤的方式回答,從表面上看您的代碼示例,而不是評論其整體邏輯或設計(因為這不是您問題的重點,我沒有專注于它)。
CHAR是一個包含另一個串列 ( l) 的串列并且HEXV是一個字典。Python list 資料型別確實是不可散列的(請參閱 Python 檔案中的 dict和hashable ),此外,每個鍵都是長度為 1 的字串,而不是串列。考慮在 HEXV 中檢查存在時僅使用第一個字符:HEXVCHAR[n]
if CHAR[n][0] in HEXV:
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/455998.html
標籤:Python python-3.x 列表 字典
