Как я могу добавить правила в список в Python - PullRequest
1 голос
/ 09 марта 2012

Мне необходимо иметь возможность ограничивать элементы, которые можно добавлять в список.Как и в пасьянсе, мне нужно добавить элемент в список, если он должен следовать за этим элементом в алфавитном порядке, а если нет, то возвращается ошибка.например;Буква d может быть добавлена ​​перед буквой c, если это другая буква или неправильный порядок, тогда карта не будет перемещена.

приведенный ниже код является лучшим, что я могу сделать до сих пор

a = ['a','c','e','j','h']

b = ['b','d','f','i','g']

def list_a():

    loop = 0
    choice = 0

    while loop == 1:
        print('''Choose from one of the following options:
                    1. Move item from list b to list a
                    2. add item to list a!''')

        choice = int(input("What would you like to do?: "))
        if choice == 1:
            move_item()

        elif choice == 2:
            add_item()
    return choice

    print('List a: ',a)
    print('List b: ',b)




def move_item():
    loop = 0
    choice = 0

    while loop == 1:
        print('''Choose from one of the following options:
                    1. Move item 1
                    2. move item 2
                    3. Move item 3
                    4. move item 4
                    5. Move item 5!''')

        choice = int(input("What would you like to do?: "))
        if choice == 1:
            a.append(b.pop(0))

        elif choice == 2:
            a.append(b.pop(1))

        elif choice == 3:
            a.append(b.pop(2))

        elif choice == 4:
            a.append(b.pop(3))

        elif choice == 5:
            a.append(b.pop())

    return choice

def add_item():
    print()

list_a()

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Создайте подкласс списка и переопределите setitem , вставьте и / или все, что вам нужно для хранения вашей бизнес-логики.

class MyList(list):
  def passes_rules(self, idx, value):
    """ Checks to see if this value can be set to this index """

  def __setitem__(self, idx, value):
    if self.passes_rules(idx, value):
      super(MyList, self).__setitem__(idx, value)

Кто-то другой, возможно, скажет нам, достаточно ли setitem , или если вам нужно также беспокоиться о добавлении и вставке. Эксперименты тоже подойдут, но дайте мне знать, что вы найдете. :)

0 голосов
/ 09 марта 2012

Вы можете проверить, стоит ли letter1 перед letter2 в алфавите с помощью чего-то подобного.

import string
if string.ascii_lowercase.find(letter1) < string.ascii_lowercase.find(letter2):
    print("Letter 1 comes before letter 2")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...