Обработка строк в цикле - PullRequest
4 голосов
/ 18 марта 2012

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

Я - полный новичок в 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

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

РЕДАКТИРОВАТЬ: некоторые из советов, которые вы, ребята, сказали мне, я еще не выучил.Для этого вопроса я должен использовать:

  • для цикла
  • in

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

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

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

Ответы [ 5 ]

4 голосов
/ 18 марта 2012

Давайте начнем здесь и поговорим немного:

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

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

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

Далее:

if c == char c in "string2":

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

1 голос
/ 18 марта 2012

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

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

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

    Попробуйте немного поиграть с ними.

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

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

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

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


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

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

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

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

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

и:

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

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

Если это все еще "не имеет особого смысла" , чем я бы предложил прочитать хороший Python Tutorial и возвращайтесь позже.

1 голос
/ 18 марта 2012

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

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')
0 голосов
/ 18 марта 2012
0 голосов
/ 18 марта 2012

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

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

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

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

...