首页 > 解决方案 > 在类之间切换并通过结果

问题描述

我正在尝试将不同的 PlugLead 添加到 PlugBoard 并提取组合。在第一堂课中,如果它们匹配或返回输入,我将从列表中提取一个字母。例如

lead = PlugLead("AG")
assert(lead.encode("A") == "G")
class PlugLead:
    def __init__(self, c):
        self.c = c
        
    def encode(self, l):
        c0 = self.c[0]
        c1 = self.c[1]
        if len(l) == 1 and c0 == l:
            return c1
        elif len(l) == 1 and c1 == l:
            return c0
        else:
            return l
        
class Plugboard:
    def __init__(self):
        self.__head = 0
        self.leads = []
        self.c = []
    
    def add(self, item):
        if self.__head >= 10:
            print("leads already got 10 items")
        elif item in self.leads:
            print(f"leads already have this item: {item}")
        else:
            self.leads.append(item)
            self.__head += 1
        return self.leads

    def encode(self)
        lines = plugboard.leads
        for word in lines:
            word = word.split(",")
            PlugLead.encode(word)

在第二堂课中,我尝试添加多个组合,然后最后传递一个字母以查看其在类 PlugLead 中的匹配项,但无法在两者之间切换。在 PlugLead 类中,我有一个 add 函数,它允许将不同的组合添加到 10,然后我想从这个列表中对这些对的组合进行编码。例如

plugboard = Plugboard()

plugboard.add(PlugLead("SZ"))
plugboard.add(PlugLead("GT"))
plugboard.add(PlugLead("DV"))
plugboard.add(PlugLead("KU"))

assert(plugboard.encode("K") == "U")
assert(plugboard.encode("A") == "A")

标签: python-3.xclass

解决方案


  • 如果你想使用PlugLead("{balabala}"),你需要在创建实例时__new__返回 a ,而不是.dict__init__
  • 你想要一个键值对Plugboard,它应该dict不是list
  • 修复一些其他错字和错误。

代码:

class PlugLead:
    def __new__(self, c):
        return {c[0]:c[1]}
        
class Plugboard:
    def __init__(self):
        self.__head = 0
        self.leads = {}
    
    def add(self, item):
        if self.__head >= 10:
            print("leads already got 10 items")
        elif list(item.keys())[0] in self.leads.keys():
            print(f"leads already have this item: {item}")
        else:
            self.leads.update(item)
            self.__head += 1
        return self.leads

    def encode(self,key):
        if key in self.leads:
            return self.leads[key]
        elif key in self.leads.values():
            return list(self.leads.keys())[list(self.leads.values()).index(key)]
        return key

plugboard = Plugboard()
plugboard.add(PlugLead("SZ"))
plugboard.add(PlugLead("GT"))
plugboard.add(PlugLead("DV"))
plugboard.add(PlugLead("KU"))
plugboard.add(PlugLead("KU"))

assert(plugboard.encode("K") == "U")
assert(plugboard.encode("U") == "K")
assert(plugboard.encode("A") == "A")

print(plugboard.encode("K"))
print(plugboard.encode("U"))
print(plugboard.encode("A"))

结果:

leads already have this item: {'K': 'U'}
U
K
A

推荐阅读