所以我试图制作一个校验位功能,令人尴尬的是,我早就遇到了困难,因为我一直在努力寻找问题,但大部分都是不幸的是,我遇到的解释超出了我的理解范围。我希望有人能给我一个关于我现在的问题的特定决定
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解决了问题
答案 0 :(得分:0)
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()
方法检查字符串是否仅包含数字。这应该是你正在寻找的。 p>
答案 3 :(得分:0)
这解决了我str
与int
的问题:
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'>