将整数拆分为数字以计算ISBN校验和

57 投票
15 回答
215733 浏览
提问于 2025-04-15 12:09

我正在写一个程序,用来计算ISBN号码的校验位。我需要读取用户输入的ISBN九位数字,并把它存到一个整数变量里。接着,我要把最后一位数字乘以2,倒数第二位乘以3,依此类推。请问我该怎么把这个整数“拆分”成每个单独的数字来进行这些计算呢?因为这是一个基础的作业练习,我不能使用列表。

15 个回答

23
list_of_ints = [int(i) for i in str(ISBN)]

这段代码会给你一个有序的整数列表。当然,由于鸭子类型的特性,你也可以直接用str(ISBN)来处理。

补充说明:正如评论中提到的,这个列表并不是按照升序或降序排列的,但它确实有一个明确的顺序(在Python中,集合、字典等理论上没有固定顺序,虽然在实际使用中,顺序通常是比较可靠的)。如果你想对它进行排序:

可以使用 list_of_ints.sort()。

注意,sort() 是就地排序(也就是说,它会直接改变原有列表的顺序),而不是返回一个新的列表。

77
while number:
    digit = number % 10

    # do whatever with digit

    # remove last digit from number (as integer)
    number //= 10

在每次循环中,它会把数字的最后一位去掉,并把这个数字存到digit里。这个过程是反向的,从最后一位开始,最后处理到第一位。

89

只需把它变成一个字符串。

myinteger = 212345
number_string = str(myinteger)

这样就够了。现在你可以遍历它:

for ch in number_string:
    print ch # will print each digit in order

或者你可以切片它:

print number_string[:2] # first two digits
print number_string[-3:] # last three digits
print number_string[3] # forth digit

更好的是,不要把用户输入的内容转换成整数(因为用户输入的是字符串)。

isbn = raw_input()
for pos, ch in enumerate(reversed(isbn)):
    print "%d * %d is %d" % pos + 2, int(ch), int(ch) * (pos + 2)

想了解更多信息,可以阅读一个 教程

撰写回答