Функция для возврата значений в словаре - PullRequest
0 голосов
/ 15 марта 2020

Это мой словарь:

seven_segment = {'0': {'a','c','d','e','b','f'},
                 '1': {'c','b'},
                 '2': {'a','d','e','b','g'},
                 '3': {'a','c','d','b','g'},
                 '4': {'g','c','f','b'},
                 '5': {'a','c','d','g','f'},
                 '6': {'a','c','d','e','g','f'},
                 '7': {'a','c','b'},
                 '8': {'a','c','d','e','b','g','f'},
                 '9': {'a','c','d','b','g','f'}}

У меня есть созданная функция:

def guess_damaged(display, state, damaged):
    sorted_state = ''.join(sorted(state))
    sorted_damaged = ''.join(sorted(damaged))
    for key in display:
        templist = list(display[key])
        templist = sorted(templist)
        templist = ''.join(templist)
        if(templist == sorted_state):
            return {key for key,value in display.items() if all(sorted_damaged in value for sorted_damaged in sorted_state)}


print(guess_damaged(seven_segment, 'adeg', 'bf'))
print(guess_damaged(seven_segment, 'abed', 'cf'))
print(guess_damaged(seven_segment, '', 'abcdefg'))

Мой текущий вывод показан ниже:

None
None
None

Однако, это мой желаемый вывод:

{'2'}
{'0'}
{'4', '5', '1', '8', '7', '6', '3', '0', '2', '9'}

Как я могу получить желаемый вывод?

Ответы [ 2 ]

1 голос
/ 15 марта 2020

Решение

Я думаю, это то, что вы хотите:

seven_segment = {'0': {'a', 'c', 'd', 'e', 'b', 'f'},
                 '1': {'c', 'b'},
                 '2': {'a', 'd', 'e', 'b', 'g'},
                 '3': {'a', 'c', 'd', 'b', 'g'},
                 '4': {'g', 'c', 'f', 'b'},
                 '5': {'a', 'c', 'd', 'g', 'f'},
                 '6': {'a', 'c', 'd', 'e', 'g', 'f'},
                 '7': {'a', 'c', 'b'},
                 '8': {'a', 'c', 'd', 'e', 'b', 'g', 'f'},
                 '9': {'a', 'c', 'd', 'b', 'g', 'f'}}


def guess_damaged(display, state, damaged):
    return {
        key
        for key, value in display.items()
        if set(state) == (value - set(damaged))
    }


print(guess_damaged(seven_segment, 'adeg', 'bf'))
print(guess_damaged(seven_segment, 'abed', 'cf'))
print(guess_damaged(seven_segment, '', 'abcdefg'))

вывод:

{'2'}
{'0'}
{'7', '1', '5', '0', '9', '4', '2', '6', '3', '8'}

Объяснение

set очень мощный встроенный класс. справочная страница о set
Вы можете выполнить с set:

  • объединение (|)
  • пересечение (&)
  • разница (-)
  • симметрия c разница (^)
  • подмножества отношений (<=, <, >, >=)
  • равенство (==, !=)
0 голосов
/ 15 марта 2020

В словаре seven_segment нет значения, равного «adeg», «abed» или «» при сортировке, поэтому строка с выражением «if (templist == sorted_state):« never is true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...