擅长:python、mysql、java
<blockquote>
<p>If 10 minus the remainder is equal to the 13th digit, then it's valid.</p>
</blockquote>
<p>对于ISBN,“10减去余数”是<code>10 - 0 % 10 = 10</code>。这不等于第13位,即<code>0</code>。因为<code>10 != 0</code>,ISBN是无效的。你知道吗</p>
<p>但你的代码太冗长了。让我们考虑一种更好的编写算法的方法:</p>
<pre><code>isbn_str = input()
k = 10 - (sum(map(int, isbn_str[0:-1:2])) + sum(map(int, isbn_str[1:-1:2]))*3) % 10
print(k)
if k == int(isbn_str[-1]):
print("Valid")
else:
print("Invalid")
</code></pre>
<p>请注意,可以使用与对列表进行切片相同的方式对字符串进行切片,即使用语法<code>start:stop:step</code>。<code>map</code>+<code>int</code>延迟地将iterable的每个元素转换为整数,<code>sum</code>获取这些整数并对其求和。另见<a href="https://stackoverflow.com/questions/509211/understanding-pythons-slice-notation">Understanding Python's slice notation</a>。你知道吗</p>