#python
#python
Вопрос:
Моя нынешняя попытка заключается в следующем:
iary_word = [word for word in sys.stdin if word.endswith("iary")
print(len(iary_word))
но он всегда выводит 0.
Что не так с моим кодом и как я могу заставить его работать?
Комментарии:
1. Вы должны уточнить, что именно не так с вашим текущим кодом. Если вы получаете сообщение об ошибке, всегда включайте полную обратную трассировку ошибок. Если вы не получаете ожидаемый результат, включите хорошо подобранный образец ввода и соответствующий результат по сравнению с ожидаемым результатом.
2. он просто выводит 0 вместо ожидаемого значения, которое в данном случае равно 14
Ответ №1:
При повторении sys.stdin
, как и при повторении объекта текстового файла, Python выполняет итерацию построчно.
Итак, вы получаете строку, а не одно слово, на каждой итерации вашего цикла for . Вы должны разделить эту строку, чтобы получить отдельные слова:
iary_words = []
for line in sys.stdin:
for word in line.split():
if word.endswith('iary'):
iary_words.append(word)
Или с пониманием списка, вложением циклов в том же порядке:
iary_words = [word for line in sys.stdin for word in line.split() if word.endswith('iary')]
Ответ №2:
Из того, что я вижу, когда вы принимаете входные данные sys.stdin
, вы не удаляете символ новой строки. Символ новой строки ( n
) добавляется в конец каждого ввода из sys.stdin
. Это испортит список, так как взятые слова заканчиваются на "iaryn"
«а не просто "iary"
» .
Поэтому, прежде чем вы что-либо сделаете, вы можете захотеть сделать .rstrip()
перед проверкой в итерации, что-то вроде этого:
iary_words = []
for line in sys.stdin:
sentence = line.rstrip('n')
# this turns something like "biaryn" to "biary"
if sentence.endswith("iary"):
iary_words.append(sentence)
return len(iary_words)
Это работает, но это не блестящее определение красоты. Может быть, вы можете перечислить понимание этого, но это было просто проще.