2012-03-18 3 views
4

Я пытаюсь написать функцию, которая принимает два строковых аргумента и возвращает количество раз, когда символ из первой строки встречается во второй строке.Обработка строк в цикле

Я полный новичок в python и в тупике. Если бы кто-нибудь мог указать мне в правильном направлении, это было бы здорово. Мне дали это, чтобы начать с:

def occurrences(text1, text2): 
    """Return the number of times characters from text1 occur in text2 

    occurrences(string, string) -> int 
    """ 
    #Your code goes here 

Как видите, необходимо 2 строки. Я думал, что строка 1 и строка 2 будут достаточными, но я не знаю, как их определить.

Я начал с этого до сих пор, и я даже не добился успеха.

for c in "string": 
    print c 
    if c == char c in "string2": 
     count += 1 

Я просто бросал в случайных величинах, потому что, как я полагаю, чтобы найти символ (A-Z) в строке, что я даже не знаю?

EDIT: некоторые из советов, которые вы сказали мне, я еще не научился. Для этого вопроса я должен использовать:

  • цикл
  • in

Некоторые намеки были даны мне также:

Подсказка 1: Вы могли бы найти in полезно для тестирования, если один строка находится в другой строке.

Подсказка 2. Посмотрите на каждый символ во втором аргументе и посмотрите, находится ли он в первом аргументе.

+1

Это хороший вопрос, потому что вы объясняете свою проблему, вы показываете, что вы сделали до сих пор, объясните, почему/как вы застряли, и отметили это как домашнюю работу. – Marcin

ответ

4

Давайте начнем здесь и немного обсуждения:

Как видите, нужны 2 строки. Я думал, что строка 1 и строка 2 будут достаточными, но я не знаю, как их определить.

Им предоставлены: их называют text1 и text2. Они исходят из кода, который вызывает функции. Были ли какие-то функции объяснены вам в какой-то момент? Как вы считаете, как работает функция? Как будет выглядеть код, который вызывает occurrences?

(Подсказка для последней части: есть пример, приведенный на листе задания.)

Следующая:

if c == char c in "string2": 

Что вы ожидать, что это значит? В частности, что вы ожидаете от char? (Вы изучали языки программирования, отличные от Python раньше?)

+0

Нет, я раньше не изучал другие языки программирования. Я сделал несколько HTML в highschool, но это было довольно просто. С этим я пытаюсь объяснить, что: если c принадлежит символу в строках 2. Я думаю, что я поставил c для c = c в строке 2 –

+0

Хорошо, а остальные вопросы? (Я отредактирую ответ с вашими ответами и продолжу, мы можем удалить комментарии после этого. Или мы можем принять его в чате, если это станет необходимым.) –

+0

Как бы заставить функцию найти отдельные буквы (AZ) в строках , Я сделал функцию до сих пор, что для c в тексте 1, подсчитайте число c в тексте 2. Я все еще не понимаю, как я могу записать это в python. –

0

Итак, вы знаете, как перебирать символы в строке: хорошо.

То, что вы не делаете, - это все, что могло их сосчитать. Вам нужен набор счетчиков для отслеживания каждого символа в строке. Один из способов достичь этого - dict, или collections.defaultdict, или другой класс, найденный в collections.

Используйте документы, Люк.

Bonus tip: можно сделать это (читаемо) в O (m + n) раз в одной строке, используя соответствующие структуры данных и понимание списка (google it!).

1

Поскольку это звучит как домашнее задание, я просто хочу дать вам несколько советов о том, что вам нужно сделать:

  1. Узнайте, какие charachters находятся в text1 строке. Дело в том, что вы не будете вступать в один и тот же персонаж дважды.
    set() может помочь вам в этом:

    >>> set('fooled') 
    set(['d', 'e', 'l', 'o', 'f']) 
    

    Try немного поиграть с ними.

  2. Итерации по множеству (разных) символов от text1.Вы можете использовать .count():

    >>> 'hello world'.count('e') 
    1 
    >>> 'hello world'.count('o') 
    2 
    

    Это может посчитать, сколько раз charachter встречается, в строке, вам необходимо суммировать все эти ценности и вернуть эту сумму.

Примечания: Есть много способов сделать то, что вы просите, это только один из них (и не самых лучших производительных один). Если вы посмотрите вокруг поиска для «количества строк вхождений» или что-то подобное, что вы можете найти другие интересные решения :)


Другой подход мог бы начать с text2:

  1. Итерация с for-loop over text2
  2. Если char из text2 найден in text1, чем приращение на одну вашу сумму.

Update: Вы пробовали немного, чтобы играть с ними?

Проверьте разницу между:

>>> word = 'fooled' 
>>> for c in word: 
...  print(c) 

и:

>>> word = 'fooled' 
>>> for c in set(word): 
...  print(c) 

Это не должно быть трудно назвать внутри для цикла text2.count(c).

Если это все еще "doens't make much sense", то я бы посоветовал прочитать хороший Python Tutorial и вернуться позже.

1

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

def occurrences(text1, text2): 
    """Return the number of times characters from text1 occur in text2 

    occurrences(string, string) -> int 
    """ 
    # loop through the string in the variable `text1` 
    for c in text1: 
     print c 
     # see if its in `text2` 
     if c in text2: 
      pass # you do the rest ;) 

# calls the function with 'fooled' -> text1 and 'hello world' -> text2 
print occurrences('fooled', 'hello world') 
-1

для Python 2.7 и выше:

[Solution in previous version of question]

+0

Не делайте домашнее задание учеников для них. Кроме того, эта версия является неоптимальной. – Marcin

+0

ах, извините, не знал о теге «домашнее задание» :) –