Я пытаюсь отсортировать и установить строку, чтобы увидеть, соответствует ли она алфавиту. Если да, я хочу вернуть True, но возвращает False - PullRequest
1 голос
/ 23 марта 2020
import string

def ispangram(str1, alphabet=string.ascii_lowercase):
    return ''.join(sorted(set(str1.lower()))) == alphabet
ispangram("The quick brown fox jumps over the lazy dog")

вывод ''.join(sorted(set(str1.lower()))) равен 'abcdefghijklmnopqrstuvwxyz '

, в конце есть пробел, поэтому он не соответствует строке алфавита и возвращает false.

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

Ответы [ 5 ]

3 голосов
/ 23 марта 2020

Кажется, что вы действительно хотите знать, что каждый элемент алфавита находится в строке. Если строка может содержать знаки препинания и пробелы, вы, вероятно, не хотите, чтобы они мешали вашему тесту. То, что вы можете сделать, это набор тестовой строки и алфавита и посмотреть, является ли набор тестовой строки надмножеством алфавита с помощью оператора >=

import string

def ispangram(str1, alphabet=string.ascii_lowercase):
    return set(str1.lower()) >= set(alphabet)


ispangram("The brown quick fox jumps over the lazy dog") 
# true
ispangram("The brown (quick) fox jumps over the lazy dog?")
#true

ispangram("The quick fox jumps over the lazy dog")
#false

Это имеет добавленное преимущество избегания сортировки.

2 голосов
/ 23 марта 2020

Вы можете легко решить эту проблему с помощью функции strip () , эта функция помогает удалить дополнительные пробелы в выводе, например:

import string

def ispangram(str1, alphabet=string.ascii_lowercase):
    output = ''.join(sorted(set(str1.lower()))).replace(" ","")
    return output == alphabet

Вы можете прочитать о функция strip () и другие встроенные функции в официальной документации Python .

Редактировать: Как указано, поскольку пусто пробелы могут быть в других частях, а не только в начале конца, я редактирую для использования функции replace () .

Дайте мне знать, если это поможет! : D

2 голосов
/ 23 марта 2020

Сначала вы должны удалить все, что не в алфавите.

def ispangram(str1, alphabet=string.ascii_lowercase):
    set1 = set(filter(lambda c: c in alphabet, str1.lower()))
    return ''.join(sorted(set1)) == alphabet
1 голос
/ 23 марта 2020

У вас есть пробел в str1.
Вы должны попробовать это:

''.join(sorted(set("".join(str1.split()).lower())))

Сначала удаляются все пробелы из str1. Затем делает то, что вы уже сделали.

0 голосов
/ 23 марта 2020

Отменить текущий тест: проверить, встречаются ли все символы в alphabet в str1:

import string

def ispangram(str1, alphabet=string.ascii_lowercase):
    return (all(char in str1.lower() for char in alphabet))

print (ispangram ('Watch “Jeopardy!”, Alex Trebek’s fun TV quiz game.'))

all(x), возвращает True, если все x элементы оценивают как истинные. char in str1.lower() for char in alphabet выполняет итерацию по alphabet и проверяет, встречается ли каждый из его символов (в char) в str1.lower. Как только кто-то терпит неудачу, all возвращает False, True в противном случае.

...