0

所以我试图做一个校验位功能,令人尴尬的是,我很早就遇到了一个我一直试图寻找问题的障碍,但不幸的是,我遇到的大多数解释都超出了我的理解。我希望有人能给我一个具体的问题,我现在的问题是什么

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

4 回答 4

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'>
于 2017-12-04T17:42:12.983 回答
0

在 python 中,以八进制开头的数字0,您得到的“无效令牌”错误必须在大于 7 的数字上,这在以 8 为基数的数字中是非法的。尝试使用raw_input()而不是,input()这样该值就不会被评估为数字。

于 2017-12-04T17:28:42.313 回答
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()

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

于 2017-12-04T17:32:48.117 回答
0

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

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

于 2017-12-04T17:33:38.383 回答