Простейшее путь, чтобы сделать буквы набор, разделить каждую строку на слова и просуммировать, сколько раз там были слова без каких-либо запрещенных букв:
with open("demo.txt", 'r') as f:
letters = set(raw_input("Enter the key you want to exclude"))
print(sum(not letters.intersection(w) for line in f for w in line.split()))
Вы также можете использовать str.translate, проверяя, если длина слова изменилось после того, как перевод:
with open("demo.txt", 'r') as f:
letters = raw_input("Enter the key you want to exclude")
print(sum(len(w.translate(None, letters)) == len(w) for line in f for w in line.split()))
Если слово имеет одинаковую длину после попытки удалить любое letters
, тогда слово не содержит буквы из букв.
Или с помощью any
:
with open("in.txt", 'r') as f:
letters = raw_input("Enter the key you want to exclude")
print(sum(not any(let in w for let in letters) for line in f for w in line.split()))
any(let in w for let in letters)
проверит каждую букву в письмах и посмотреть, если какой-либо буквы в каждом слове, если она находит запрещенную письмо это будет короткое замыкание, и вернуть True
либо вернуть False
если в слове не появилось буквы, а затем перейти к следующему слову.
Вы не можете использовать if l in word
, если только у вас есть только одно слово в строке, вам нужно разделить на отдельные слова.
Используя свой собственный код, который вы просто нужно сломать, когда вы нашли букву в слове, иначе напечатать слово, если мы петельные над всеми буквами и не нашел ни одного совпадения:
for line in fin:
word = line.strip()
for l in letters:
if l in word:
break
else:
print word
вещий способ сделать что вы хотите в цикле будет использовать любой:
for line in fin:
word = line.strip()
if not any(l not in word for l in letters):
print word
что эквивалентно перерыв/еще только намного лучше.
Если вы хотите сумму, то вам нужно следить, как вы идете:
total = 0
for line in fin:
word = line.strip()
if not any(l not in word for l in letters):
total += 1
print(total)
Который является менее эффективным способом сделать:
print(sum(not any(let in w.rstrip() for let in letters) for word in f))
Спасибо за решение, но все же программы избегают только первой буквы из строки –
вы уверены в этом? обратите внимание, что приведенный выше код должен быть внутри цикла 'for word in ... ', поскольку он отображает только логические слова« только для слов, не содержащих букв ». –