Использование цикла for для подсчета количества букв и количества конкретных букв \ - PullRequest
0 голосов
/ 02 ноября 2018

Для школьного проекта мне нужно написать функцию, которая подсчитывает количество букв в строке, но также подсчитывает количество конкретной буквы, однако общее количество букв увеличивается только тогда, когда это указанная буква. Я не понимаю, почему он не регистрирует ascii_lowercase в качестве строчного алфавита в 3.7, если только я что-то не так понял.

def analyze_string(quote, search_letter):
    count_letters = 0
    count_occurance = 0
    phrase = quote.lower()
    letter = string.ascii_lowercase
    length = len(phrase)
    for i in phrase:
        if i == letter:
            count_letters = count_letters + 1
        elif i == search_letter:
            count_letters = count_letters + 1
            count_occurance = count_occurance + 1
        else:
            count_letters = count_letters + 0

    return count_letters, count_occurance

1 Ответ

0 голосов
/ 02 ноября 2018

Эта строка проблематична:

if i == letter:

Вы присвоили letter строку, содержащую все строчные буквы, через string.ascii_lowercase. Но i - это всего лишь одна буква. Вместо этого вы можете использовать:

if i in letter:
    # ...

Проверка принадлежности строки занимает O ( n ) время. Вы можете использовать set, чтобы заранее уменьшить это значение до O (1) с помощью преобразования:

letter = set(string.ascii_lowercase)

Затем вам нужно отменить порядок ваших if выписок, чтобы проверка на search_letter имела приоритет. В противном случае, если search_letter существует в letter, второе условие никогда не будет выполнено.

for i in phrase:
    if i == search_letter:
        count_letters = count_letters + 1
        count_occurance = count_occurance + 1
    elif i in letter:
        count_letters = count_letters + 1

Обратите внимание, что приведенные ниже строки являются избыточными, их можно безопасно удалить:

else:
    count_letters = count_letters + 0
...