python:输入数字,然后存入数组,首位为0,为什么不行

number = input(u'输入号码:\n'.encode('utf-8'))
#number = "%03d"%number
num_list = list(str(number))
num_list = [int(num_list[i]) for i in range(len(num_list))]
print num_list

代码如上,输入其他数字还行。都能正常print出来
但是如果首位是0 。 比如输入“046”,那会打印出来[3,8]
请问这是什么原因

阅读 5.9k
3 个回答

你用的应该是python2.7。
把input方法替换成raw_input。
因为input实际执行的是eval(raw_input(prompt)),会导致输入的字符串046被执行,其0开头被识别为8进制数,转换成10进制后为038。
所以使用raw_input后得到字符串u'046'就可以了

遇到 0 开头的数字要敏感:

clipboard.png

至于如何避免,我很少用 python ,你可以按这个方向去找找。

input([prompt])
Equivalent to eval(raw_input(prompt)).

input 方法相对于 eval(输入内容),如果只是想获取输入字符串,用 raw_input() 更好

python2.* 中,0 开头的表示 8 进制,38 是转换为 10 进制的结果

clipboard.png

python3.* 中,8进制已经改为 0o 开头了,所以不会装换

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题