令牌无效。不接受以 0 开头的整数

Invalid Token. Not accepting integers that start with 0

所以我正在尝试制作一个校验位功能,令人尴尬的是,我已经 运行 很早就陷入了困境,我一直在努力寻找问题所在,但大多数不幸的是,我 运行 的解释超出了我的理解范围。我希望有人能给我一个具体的 运行-down 关于我现在的问题

mam = []

def check_digit():
    a = int(input("Please enter your 10 digit book number"))
    b = str(a)
    for c in b:
        mam.append(c)
        print(c)

check_digit()

抱歉没有为变量设置名称,我更喜欢这样编码,即使它最终会让其他人难以阅读。反正我每次写一个0开头的整数,都会出现语法错误"Invalid token",不知道怎么解决。谁能帮帮我?我将不胜感激

已修复。 我真的需要更新 Python,我现在 运行ning 2.7。

raw_input 解决了问题

在python中,以0开头的数字是八进制的,你得到的'invalid token'错误必须是大于7的数字,这在a中是非法的基数 8。尝试使用 raw_input() 而不是 input(),这样该值就不会被计算为数字。

您将 a 转换为 int,但从未将其用作 int。尝试直接遍历输入字符串。

mam = []

def check_digit():
    a = raw_input("Please enter your 10 digit book number")
    for c in a:
        mam.append(c)
        print(c)

check_digit()

其他答案对问题根源的解释对我来说很有意义。这应该可以解决问题,因为您根本不需要将输入解释为整数。

在Python中,非十进制数字以“0”开头。十进制数不能以“0”开头。旧式八进制数字过去以“0”开头,因此“010”在 Python 中为 8 2. 十六进制数字以“0x”开头,在 Python 中仍然如此 3. 在 Python 3、八进制数现在以'0o'开头。 你抛出错误是因为你输入了一个字符串然后 运行 int() 就可以了。不要那样做。您可以只检查输入的字符串是否全是数字,并确保它的长度正确。 或者,如果您打算检查将 int 转换为小数,则应在转换前使用 value.lstrip('0') 去除前导零。

或者,您可以只输入 mam 然后检查 if mam.isdigit():... .isdigit() 方法检查字符串是否仅由数字组成。这应该是您要找的。

这解决了我 strint 的问题:

mam = []

def check_digit():
    a = str(input("Please enter your 10 digit book number: "))
    [mam.append(int(inputted)) for inputted in a]
    print(mam)

check_digit()
print(mam[0] + mam[1])
print(type(mam[0]))

输入:

Please enter your 10 digit book number: 0123456789

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1
<class 'int'>