Уровень: новичок
word= 'even'
dict2 = {'i': 1, 'n': 1, 'e': 1, 'l': 2, 'v': 2}
Я хочу знать, если слово целиком составлено из букв в dict2 мой подход:
шаг 1: преобразование слова в словарь (dict1)
step2:
for k in dict1.keys():
if k in dict2:
if dict1[k] != dict2[k]:
return False
return True
добавив инструкцию печати, я вижу, что это просто заканчивается слишком рано например как только будет выполнено первое условие IF, цикл выходит, и я не получу правильный ответ. я думаю, что это легко, но google и python doc не возвращают никакой пользы подсказки, поэтому я пытаюсь здесь.
Спасибо, Баба
ОБНОВЛЕНИЕ
количество раз, которое каждая буква, содержащаяся в слове, должно быть меньше или равно числу раз, которое оно появляется в dict2. Таким образом, я уверен, что слово целиком состоит из элементов dict2.
for k in word.keys(): # word has ben converted to key already
if k not in hand:
return False
elif k in hand:
if word[k] > hand[k]:
return False
return True
Вы только хотите вернуть true после всех проверок, поэтому придерживайтесь его после цикла. Здесь это как прямая модификация вашего кода:
for k in dict1.keys():
if k in dict2:
if dict1[k] != dict2[k]:
return False
return True
>>> word= 'even'
>>> dict2 = {'i': 1, 'n': 1, 'e': 1, 'l': 2, 'v': 2}
>>> set(word).issubset(set(dict2.keys()))
True
.keys()
возвращает список, поэтому вы используете конструктор set (), чтобы превратить как слово, так и список ключей в наборы.
Если вам это не нужно для чего-то другого, не беспокойтесь о том, чтобы построить dict1. Просто сделайте следующее:
for c in word:
if c not in dict2:
return False
return True
Конечно, вы также можете использовать set
вместо dict
для хранения букв.
>>> word = {'e':2, 'v':1, 'n':1}
>>> hand= {'i': 1, 'n': 1, 'e': 1, 'l': 2, 'v': 2}
>>> all(k in hand and v <= hand[k] for k,v in word.items())
False
и теперь увидеть истинный случай
>>> hand['e']+=1
>>> all(k in hand and v <= hand[k] for k,v in word.items())
True
в вашем коде, просто переместите "return True", чтобы он находился за пределами всех циклов. То есть, верните true только в том случае, если ваши петли завершатся без нахождения несоответствующего значения. Действительно ли то, что вы хотите для своего реального кода, сказать сложно, но перемещение "return True" фиксирует логическую ошибку в отправленном вами коде.
dict2['v']=2
чтоword
может содержать не более 2v
s?