2015-11-19 2 views
-4

Я создаю класс SwitchBoard со следующими свойствами:Как создать класс (SwitchBoard), который включает и выключает переключатели?

• Когда я создаю коммутатор, я должен быть в состоянии установить количество содержащихся в нем переключателей.

• Все переключатели должны начинаться в положении «выключено».

• Если я печатаю распределительный щит, он должен печатать что-то вдоль линий: «Следующие переключатели: : 0 2 4 6 8».

• Какой метод-коммутатор должен возвращать список целых чисел, представляющих переключатели, которые включены, в пункте (например, [1,3,5,7,9]).

• Если я вызываю flip (n) с n в качестве целого числа, он должен перевернуть состояние n-го переключателя подсветки.

• Если я называю flip каждый (n) с n в качестве целого числа, он должен переворачивать состояние каждого n-го переключателя света, начиная с в 0. Так что переверните каждый (2), переверните переключатели 0, 2, 4 , 6 и т. Д.

• Метод reset() должен отключить все выключатели.

• Если я задаю распределительный щит, чтобы перевернуть переключатель, который не существует, ничего не должно произойти (он не должен врезаться)

Итак, я первый построить Lightswitch, который хорошо работает.

class LightSwitch(): 
''' A class to reprenset a general light switch''' 

    def __init__(self, light_state): 
     if(light_state == 'on'): 
      mode = True 
     else: 
      mode = False 
     self._state = mode 

    def __str__(self): 
     if(self._state == True): 
      return 'I am on' 
     if(self._state == False): 
      return 'I am off' 

    def turn_on(self): 
     if(self._state == False): 
      self._state = not self._state 

    def turn_off(self): 
     if(self._state == True): 
      self._state = not self._state 

    def flip(self): 
     self._state = not self._state 

И для SwitchBoard это то, что я получил так.

class SwitchBoard(): 

    def __init__(self, num_switch): 
     self.switches = [] 
     for i in range(num_switch): 
      self.switches.append(LightSwitch('off')) 

    def __str__(self): 
     switch_on = '' 
     switch_on_list = self.which_switch() 
     for i in range(0, len(switch_on_list)): 
      switch_on += ' ' + str(switch_on_list[i]) 
     return 'The following switches are on:' + switch_on 

    def which_switch(self): 
     switch_on_list = [] 
     for i in range(0, len(self.switches) - 1): 
      if(self.switches[i] == True): 
       switch_on_list.append(i) 
     return switch_on_list 

    def flip(self, switch_index): 
     if(switch_index <= len(self.switches) -1): 
     self.switches[switch_index].flip() 

    def flip_every(self, step): 
     for i in range(0,len(self.switches), step): 
      self.flip(i)   

    def reset(self): 
     for every_switch in self.switches: 
      every_switch.turn_off() 


if(__name__==("__main__")): 
s = SwitchBoard(10) 
s.flip(2) 
print(s) 
print(s.which_switch()) 
s.flip_every(2) 
print(s) 
print(s.which_switch()) 

Это не работает. Флип просто кажется не работает, и я не знаю, почему. Пожалуйста, помогите!

+0

В функции __switch вы пропустите его: нет, если (self.switches [i] == True): но если (self.switches [i] ._ state == True): –

+0

Теперь он работает! Спасибо огромное! –

+23

Пожалуйста, не удаляйте свои вопросы после получения удовлетворительного ответа. Он обманывает остальной мир, который может извлечь выгоду из него, и ответчиков. –

ответ

10

Попробуйте с

def which_switch(self): 
    switch_on_list = [] 
    for i in range(0, len(self.switches) - 1): 
     if(self.switches[i]._state == True): 
      switch_on_list.append(i) 
    return switch_on_list 

Но на самом деле, вы должны добавить поглотитель к вашему LightSwitch, и использовать этот поглотитель, поскольку доступ подчеркнутым переменная не очень чистый ... Например, вы можете добавить:

is_on(self): 
    return self._state 

и использовать его как это:

if(self.switches[i].is_on()): 

Но, отличный код, немного пропустите.

Кстати, у вас есть какая-то другая ошибка:

if(switch_index <= len(self.switches) -1): 

не является чистым, потому что вы никогда не запрещаете отрицательное число, например.

+2

Я согласен ... был готов опубликовать то же самое. Некоторые из них для ... ...() циклов имеют проблемы.лучше в большинстве случаев перебирать список python с помощью итератора, например 'для переключения в list_of_switches:' .. гораздо меньше подверженных ошибкам –

Смежные вопросы