2015-11-05 38 views
0

我是一個完整的福利局程序員的清單時遇到麻煩的ASCII碼的用戶輸入列表打印爲字符的列表:打印的ASCII碼的輸入列表作爲字符

ascii_code = [109, 121, 32, 110, 97, 109, 101, 32, 105, 115, 
      32, 106, 97, 109, 101, 115] 

#ascii_code = input("Please input your ASCII code:") 

character_list = list() 
for x in ascii_code: 
    character_list.append(chr(x)) 

print (character_list) 

['m', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'j', 'a', 'm', 'e', 's'] 

爲你可以看到,當ASCII表是預先定義的程序工作(在第一行代碼),但是當我嘗試運行的輸入,如:

  • ascii_code =輸入(「請輸入您的ASCII碼」)
  • ascii_code = int(input(「請輸入你的ASCII碼E: 「))
  • ascii_code =的eval(輸入(」 請輸入您的ASCII碼「))

我得到兩種類型錯誤:需要一個整數(有型STR)或類型錯誤: '詮釋'對象不可迭代。

任何幫助將不勝感激!

+0

什麼你想在'input'來電類型? –

+0

ASCII代碼列表,如:109,121,32,110,97,..等 – Slazbian

+0

好吧,你從輸入得到一個str,所以只需處理str ...在拆分和strip也許讀?然後int從你那裏得到什麼? – user3012759

回答

0

input()得到的結果是一個元組(python 2,所以使用raw_input()來獲得正確的行爲)或一個字符串(python 3)。我假設你正在使用Python 3或將切換到使用raw_input,因爲在Python 2中的input只是不好的做法。

從用戶獲得的結果是逗號分隔的字符串。你需要打破串入部分,你可以做.split(',')

>>> s = raw_input('Enter ASCII codes:') 
Enter ASCII codes: 1, 2, 3, 4, 5 
>>> s.split(',') 
[' 1', ' 2', ' 3', ' 4', ' 5'] 

但是你會發現,在列表中的數字是1)字符串,而不是整數,和2)在其周圍空間。我們可以通過遍歷的數量和使用.strip()去除空白和int()解決這個問題的剝離字符串向數字,我們可以傳遞給chr()轉換:

character_list = [] 
for p in s.split(','): 
    character_list.append(chr(int(s.strip()))) 

...但它有更Python做到這一點列表理解:

character_list = [ chr(int(p.strip())) for p in s.split(',') ] 

因此,最終的代碼最終會如:

>>> s = raw_input('Enter ASCII codes: ') 
Enter ASCII codes: 65, 66, 67 
>>> character_list = [ chr(int(p.strip())) for p in s.split(',') ] 
>>> print(character_list) 
['A', 'B', 'C'] 
+0

太好了,解決了它。是的,使用Python 3。 – Slazbian