2014-01-19 3 views
1

Я новичок в кодировании и python, и я пытаюсь использовать версию Scrabble Challenge в OpenHatch: https://openhatch.org/wiki/Scrabble_challenge.Может ли слова в List1 быть написаны буквами в List2

Цель состоит в том, чтобы проверить, может ли каждое слово в списке пишется буквами в стойке для плитки. Я написал цикл for, чтобы проверить, находится ли каждая буква в слове в стойке для плитки, и если это так, удалите букву из стойки (чтобы иметь дело с дубликатами). Однако я не понимаю, как добавить слово в список valid_word, если for-loop обнаруживает, что каждая буква слова находится в стойке.

В этом примере «возраст» должен быть действительным, но «gag» не должен быть, поскольку в стойке есть только один «g».

word_list = ['age', 'gag'] 
rack = 'page' 
valid_words = [] 

for word in word_list: 
    new_rack = rack 
    for x in range(len(word)): 
     if word[x] in new_rack: 
      new_rack = new_rack.replace(str(word[x]), "") 
+0

есть вопросы? просто как добавить слово в список? (вы можете добавить 'valid_words.append (word)') – Elisha

ответ

2

я бы, вероятно, использовать Counter здесь, чтобы упростить вещи. То, что делает класс Counter, создает сопоставление элементов в iterable с его частотой. Я могу использовать это, чтобы проверить, больше ли частота отдельных символов больше, чем в стойке, и печатать слово соответственно.

>>> from collections import Counter 
>>> word_list = ['age', 'gag'] 
>>> rack = Counter('page') 
>>> print rack 
Counter({'a': 1, 'p': 1, 'e': 1, 'g': 1}) 
>>> for word in word_list: 
     word_count = Counter(word) 
     for key, val in word_count.iteritems(): 
      if rack[key] < val: 
       break 
     else: 
      print word 


age # Output. 

Кроме того, Counter имеет приятное свойство, что она возвращает 0, если данный ключ не существует в Counter классе. Итак, мы можем пропустить проверку, чтобы увидеть, имеет ли плитка ключ, так как в этом случае ошибка rack[key] < val.

+0

'if all (rack [letter]> = count for letter, count in Counter (word) .iteritems()): print word' –

+0

' Counter's can (с клавишами, идущими ниже 1 - удаление), поэтому вам не нужен этот цикл .... 'Counter (word) - rack' дает вам количество символов, оставшихся в слове, не найденном в стойке, поэтому, если это пустой счетчик, стойка может сделать это слово ... поэтому ... 'if not Counter (word) - rack: print word' - это все, что вам нужно ... –

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