Более общая помощь, я полагаю, я должен использовать «карту (лямбда ....)» - - PullRequest
0 голосов
/ 03 декабря 2018
# check if string is panagram (phrase which contains every letter of the
# alphabet)

def panagram_check(str0, alphabet=string.ascii.lowercase):

        alltrues = [True,True,True,True,True,True,True,True,True,True,
                    True,True,True,True,True,True,True,True,True,True,
                    True,True,True,True,True]

        # so let's build this list...

        list_of_bools = []

        for achar in alphabet:

            for bchar in str0:
                if achar != bchar:
                    zerocheck = False

                else:  zerocheck = True

            list_of_bools = list_of_bools+zerocheck

        return (list_of_bools==alltrues)

Это возвращает ошибку "строка имени не определена", что также сбивает меня с толку, но если лямбда-выражения помогают это не быть уродливым, какие-либо подсказки?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вы можете проверить, находится ли каждая буква алфавита ( ascii_lowercase ) во фразе, используя все :

import string


def panagram_check(phrase, alphabet=string.ascii_lowercase):
    uniques_letters_in_phrase = set(phrase.lower())
    return all(letter in uniques_letters_in_phrase for letter in alphabet)


print(panagram_check("Two driven jocks help fax my big quiz.​"))
print(panagram_check("Not a panagram"))

Вывод

True
False

Оператор: uniques_letters_in_phrase = set(phrase.lower()) преобразует фразу в набор с целью ускорения проверки содержания.Обратите внимание, что вы должны импортировать строку, чтобы иметь доступ к ascii_lowercase.

0 голосов
/ 03 декабря 2018
import string

def panagram_check(str0, alphabet=string.ascii.lowercase):
    return set(str0.lower()) & set(alphabet) == set(alphabet)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...