擅长:python、mysql、java
<p>这个怎么样:</p>
<pre><code>def congruent(self, other, eps=0.001):
ratios = (c1 / c2 for c1, c2 in zip(self.coords, other.coords) if c1 or c2)
try:
first = next(ratios)
return all(abs(ratio - first) < eps for ratio in ratios)
except ZeroDivisionError:
return False
</code></pre>
<ol>
<li>如果可能,更喜欢直接在元素上操作而不是在索引上操作(<code>zip</code>很方便)。在</li>
<li>当<em>或者</em>坐标为非零时,list comprehension得到所有的坐标比。如果两者都是,那就好了,而且会被排除在外。在</li>
<li>ZDE只在<code>c1</code>非零且<code>c2</code>为零时发生,因此这是一个失败。在</li>
<li>最后,如果所有比率相等,我们就通过了。在</li>
</ol>
<p>注意:如果不使用Python3,应该在文件顶部添加<code>from __future__ import division</code>,这样就不会得到整数坐标值的错误结果。在</p>
<p><strong>编辑:</strong>根据@JoranBeasley添加了短路和epsilon比较。在</p>