将输入的ASCII码列表打印为字符列表

时间:2015-11-05 12:23:55

标签: python python-3.x input ascii typeerror

我是一名完整的新手程序员,无法将用户输入的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(输入("请输入您的ASCII码:"))
  • ascii_code = eval(输入("请输入您的ASCII码:"))

我得到TypeError:需要一个整数(得到类型str)或TypeError:' int'对象不可迭代。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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())))

...但是用列表理解来做这件事更像Pythonic:

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']