2017-02-11 4 views
1

В настоящее время работает над заданием и немного застревает. Ищете некоторую помощь, чтобы приблизиться к этому. Я пытаюсь попробовать функцию, которая принимает два значения журнала и выкуп, которые вводятся пользователем. Если персонажей в выкупе можно найти в журнале, я хочу вернуться, что это правда, если строка выкупа не может быть найдена в строке журнала, возвращает false. Выкуп делится на словарь {ключ, vaue} так, например, пользователь вводит:Сравнение символов строки со словарем python

Enter журнал: привет

Введите выкупом: привет

{ 'ч': 1, 'е': 1, 'л': 2 'о': 1}

{ 'ч': 1, 'е': 1, 'л': 1, 'о': 1}

Это должно вернуться true, но возвращает false, потому что он не учитывает второй 'l' в 'hello'. Что я делаю не так?

def compare(magazine, ransom): 
matches = {} 
for ch in ransom: 
    if ch in magazine: 
     if ch in matches: 
      matches[ch] += 1 
     else: 
      matches[ch] = 1 

if ransom in matches: 
    return True 
else: 
    return False 
+0

'выкуп в matches' чеках, если целое слово Выкуп в ключах, принадлежащих к словарю' { 'ч': 1, 'о': 1, 'л': 2, 'е': 1} '. 'somethin в словаре' будет возвращать' True', только если вы предоставите некоторую строку, которая является ключом предоставленного dict. – MaLiN2223

ответ

1

если выкуп в матчах:

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

В коде:

ransom: 'hello' 
matches: {'h': 1, 'e': 1, 'l': 2, 'o': 1} 

Так ваш, если условие будет как:

if 'hello' in {'h': 1, 'e': 1, 'l': 2, 'o': 1}: 
    # this line will not be executed 

Это должно быть, как:

if 'h' in {'h': 1, 'e': 1, 'l': 2, 'o': 1}: 
    # this line will be executed 

Хороший способ сравнить это:

# 1. Processing ransom 
{'h': 1, 'e': 1, 'l': 2, 'o': 1} 
# 2. Processing magazine 
{'h': 2, 'e': 3, 'l': 2, 'o': 1} 
# 3. Comparing each character and counts of both one by one in a for-loop 

выкупом расщепляется в словарь {ключ, vaue}

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

# Those examples could give unexpected answers 
compare('hello there', 'olleh') 
compare('hello there', 'olleeeh')