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)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100