m0_56035801 2021-03-19 20:55 采纳率: 75%
浏览 29
已采纳

遍历时使用sorted排序并调用类的方法出现NameError

import collections
from random import choice

Card = collections.namedtuple('Card',['rank', 'suit'])


class FrenchDeck:
   ranks = [str(n) for n in range(2,11)] + list('JQKA')
   suits = 'spades diamonds clubs hearts'.split()

   def __init__(self):
      self._cards = [Card(rank, suit) for suit in self.suits
                              for rank in self.ranks]

   def __len__(self):
      return len(self._cards)

   def __getitem__(self, position):
      return self._cards[position]

   suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)


   def spades_high(card):
      rank_value = FrenchDeck.ranks.index(card.rank)
      return rank_value * len(suit_values) + suit_values[card.suit]


deck = FrenchDeck()


for card in sorted(deck, key=spades_high): #doctest: +ElLIPSIS
   print(card)

如图所示

输出错误

Traceback (most recent call last):
  File "C:/Users/86199/Desktop/wqe.py", line 32, in <module>
    for card in sorted(deck, key=spades_high): #doctest: +ElLIPSIS
NameError: name 'spades_high' is not defined

Process finished with exit code 1
  • 写回答

1条回答 默认 最新

  • herosunly Python领域优质创作者 2021-03-19 21:21
    关注

    suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)和spades_high应该是写到FrenchDeck外面,完全代码如下所示:

    import collections
    
    Card = collections.namedtuple('Card', ['rank', 'suit'])
    
    class FrenchDeck:
    
        ranks = [str(n) for n in range(2, 11)] + list('JQKA')
        suits = 'spades diamonds clubs hearts'.split()
    
        def __init__(self):
            self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]
    
        def __len__(self):
            return len(self._cards)
    
        def __getitem__(self, position):
            return self._cards[position]
    
    suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)
    
    def spades_high(card):
        rank_value = FrenchDeck.ranks.index(card.rank)
        return rank_value * len(suit_values) + suit_values[card.suit]
    
    deck = FrenchDeck()
    for card in sorted(deck, key=spades_high): #doctest: +ElLIPSIS
        print(card)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元