Python实现的ID校验代码在VSCode与Mac终端输出不一致问题咨询
问题原因分析
该问题核心由Python版本差异导致,也可能存在代码缩进错误的影响
- Python版本行为差异(主要原因)
VSCode中你运行代码用的是Python 3版本,Python 3的input()函数会直接返回用户输入的原始字符串,输入0462519449得到的字符串长度为10,校验逻辑正常执行,输出结果正确。
Mac系统默认的python命令指向Python 2.7版本,Python 2的input()函数会自动对输入内容做表达式求值:- 输入纯数字串
0462519449时,函数会将其转换为整数,Python 2中开头带0的数字会被识别为八进制数,而0462519449包含八进制不支持的数字9,会直接报错;如果输入时不小心带了前后空格、换行符,转字符串后长度不等于10,就会直接输出Invalid ID。 - 就算规避了上述问题,整数转字符串时会自动丢弃开头的0,
0462519449转为整数后是462519449,转字符串后长度只有9,也会触发长度校验失败,输出错误结果。
- 输入纯数字串
- 代码缩进错误
你贴出的代码里最后一个else分支下的print ("Invalid ID")没有正确缩进,Python是缩进敏感的语言,如果你的本地文件中这行没有按要求缩进,或者存在Tab、空格混用的情况,会导致逻辑分支执行异常,输出不符合预期。
修复方案
- 执行代码时用
python3 你的代码文件名.py替代python 你的代码文件名.py,指定用Python 3版本运行。 - 如果需要兼容Python 2,可以将
codeid = input("Please enter your ID code: ")修改为codeid = raw_input("Please enter your ID code: "),直接获取原始输入字符串。 - 修正代码缩进,确保所有分支内的代码都有统一的4空格缩进,同时可以去掉不必要的
str()转换(Python 3中input()已经返回字符串,不需要重复转换)。
内容的提问来源于stack exchange,提问作者Mani。
相关产品推荐
相关产品推荐

