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

时间:2017-12-04 17:22:15

标签: python syntax-error check-digit

所以我试图制作一个校验位功能,令人尴尬的是,我早就遇到了困难,因为我一直在努力寻找问题,但大部分都是不幸的是,我遇到的解释超出了我的理解范围。我希望有人能给我一个关于我现在的问题的特定决定

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开头的整数时,语法错误"无效的令牌"出现了,我不知道如何解决它。谁能帮助我?我将不胜感激。

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

raw_input解决了问题

4 个答案:

答案 0 :(得分:0)

在python中,以0开头的数字是八进制数,你得到的'无效令牌'错误必须是大于7的数字,这在基数为8的数字中是非法的。尝试使用raw_input()代替input(),以便不会将该值评估为数字。

答案 1 :(得分:0)

您将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()

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

答案 2 :(得分:0)

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

或者,您可以输入mam然后检查if mam.isdigit(): ... .isdigit()方法检查字符串是否仅包含数字。这应该是你正在寻找的。

答案 3 :(得分:0)

这解决了我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'>