将整数拆分为数字以计算ISBN校验和
我正在写一个程序,用来计算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)
想了解更多信息,可以阅读一个 教程。