<p>您正在使用<code>%</code>即模数和整数除法<code>//</code>一次得到一个数字。在</p>
<p><strong>而不是</strong>将整数转换为整数,然后提取单个数字,而是对输入的字符串进行处理。在</p>
<p>输入验证可以得到:</p>
<pre><code>while True:
# don't convert to int
# repeat until exactly 9 digits are given
number = input("Please enter a 9-digit number: ").strip()
if number.isdigit() and len(number) == 9:
break
# generator method - enumerate gives you the position and the value of each character
# i.e. for enumerate('123') you get (0,'1') then (1,'2') then (2,'3')
# the sum function adds up each given tuple but premultiplies the value with its (pos+1) as position inside strings start at 0 for the 1st character - it also
# converts each single character to its integer value
s1 = sum( (pos+1)*int(num) for pos,num in enumerate(number))
# s1 is a summed generator expression for this:
s2 = 0 # do not use sum - its a built-in functions name
for pos,num in enumerate(number):
s2 += (pos+1)*int(num)
print(s1,s2) # both are the same ;o)
checkdigit = s1%11
print("\nCheckdigit:", checkdigit)
</code></pre>
<p>对于<code>382660423</code>,您可以得到:</p>
^{pr2}$