【问题标题】:why comparison did not return an int为什么比较没有返回 int
【发布时间】:2016-10-22 03:01:06
【问题描述】:

我正在制作简单的老女仆游戏。这是我的牌手类:

class OldMaidHand(Hand):
    def removeMatches(self):
        count=0;
        originalCards=self.cards[:];
        for card in originalCards:
            match=Card(3-card.suit,card.rank);
            if match in self.cards:
                self.cards.remove(card);
                self.cards.remove(match);
                print "Hand %s: %s matches %s "%(self.name,card,match);
                count=count+1;
            return count;`

但它显示以下错误:

TypeError:comparison 没有返回 int。

这是我在Card 类中的__cmp__() 方法。

    def __cmp__(self,other):
        if self.suit>other.suit:
            return 1
        if self.suit<other.suit:
            return -1
        if self.rank>other.rank:
            return 1
        if self.rank<other.rank:
            return -1

【问题讨论】:

  • 请修正您的课程格式。
  • 如果相等怎么办?
  • 如果你的if 子句都不为真,__cmp__ 将返回None,这是不行的。
  • == 条件一起,您可以将类似的条件语句与or 组合起来
  • @Two-BitAlchemist 这应该是一个答案,而不是评论。

标签: python python-2.7 typeerror


【解决方案1】:

来自documentation for __cmp__

如果未定义丰富的比较(见上文),则由比较操作调用。如果 self other 返回正整数。

换句话说,正如你的错误所说,它应该在任何情况下返回一个整数。

如果您的 if 条件均未获得,您的 __cmp__ 将“脱离”函数的末尾,返回 None,这是任何未显式返回其他内容的 Python 函数的默认值。这是您的错误的根源(因为None 不是整数)。

我没有仔细检查您的代码,但您似乎忽略了等级和花色相等的情况。也许作为故障保险,您应该在函数末尾简单地return 0,除非您发现您的条件未满足但卡不相等的情况。

【讨论】:

  • 我错过了 cmp 方法的返回值。添加返回 0 后它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
相关资源
最近更新 更多