#python-3.x #class
Вопрос:
Я пытаюсь добавить различные подключаемые модули к плате и извлечь комбинацию. В первом классе я извлекаю одну букву из списка, если они совпадают или возвращают входные данные. например
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)
Во втором классе я пытаюсь добавить несколько комбинаций, а затем в конце передать одну букву, чтобы посмотреть, каково ее соответствие в плагине класса, однако я не могу переключаться между ними. В плагине класса у меня есть функция добавления, которая позволяет добавлять различные комбинации до 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")
Ответ №1:
- если вы хотите использовать
PlugLead("{balabala}")
,вам нужно использовать__new__
для возврата adict
при создании экземпляра, а не__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
Комментарии:
1. Спасибо lead_yakitori за разработку и решение этой проблемы, это очень помогает при попытке изучить Python и получить обратную связь, как вы, спасибо