擅长:python、mysql、java
<p>一旦你把代码写下来就是为了理解这个问题。在这种情况下,不必担心对玩家、游戏、掷球等进行更深层次的抽象,你会遇到以下问题:有一定数量的招式,每种招式都有一个名称,都有固定的规则,哪些招式胜过哪些其他招式,你需要找到一种方法来定义招式,并在比较中找出哪一种招式获胜。在</p>
<p>当我读到你的代码时,我并没有立即看到这个问题,我看到很多额外的想法进入了代码本身,找到类型表示,做算术技巧,通常将问题强制到代码框架中,而不是相反。所以我建议如下:</p>
<pre><code>
class Move:
TYPES = ['rock', 'paper', 'scissors']
BEATS = {
'rock': ['scissors'],
'paper': ['rock'],
'scissors': ['paper']
}
def __init__(self, type):
if type not in self.TYPES:
raise Exception("Invalid move type")
self.type = type
def __str__(self):
return self.type
def __cmp__(self, other):
if other.type in self.BEATS[self.type]:
return 1
elif self.type in self.BEATS[other.type]:
return -1
else:
return 0
</code></pre>
<p>你就完蛋了。你可以加入所有其他的访问器,等等,但这只是糖衣,核心问题得到解决,代码可读性强,灵活,易于扩展等等。这就是我认为的“pythonic”的意思。在</p>