如何打印不包括特定字母串的单词?

时间:2015-05-18 16:51:32

标签: python python-2.7

我需要编写一个程序来提示用户输入一串禁止字母,然后打印不包含任何字母的字数

这就是我所拥有的:

fin=open("demo.txt",'r')
letters=str(raw_input("Enter the key you want to exclude"))
def avoid ():   
    for line in fin:
        word = line.strip()
        for l in letters:
            if l not in word: 
                print word          
avoid()

如果我使用 in 关键字,则会打印所有具有特定字符串的字词。但是当我使用不在时,它的工作方式不同。

4 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

for l in letters:
    if l in word:
        break  # we found the letter in the word, so stop looping
else:
    # This will execute only when the loop above didn't find
    # any of the letters. 
    print(word)

答案 1 :(得分:0)

最简单的方法是将字母设为一组,将每一行分成单词,并总结有多少次没有禁字的单词:

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

在循环中执行所需操作的pythonic方法是使用any:

for line in fin:
    word = line.strip()
    if not any(l not in word for l in letters): 
         print word

这相当于break / else只是好多了。

如果您想要总和,那么您需要随时跟踪:

  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))

答案 2 :(得分:0)

另一种方式。

exclude = set(raw_input("Enter the key you want to exclude"))
with open("demo.txt") as f:
    print len(filter(exclude.isdisjoint, f.read().split()))

答案 3 :(得分:-1)

这样更好:

    forbidden='ab'
    listofstring=['a','ab','acc','aaabb']
    for i in listofstring:
        if not any((c in i) for c in forbidden):
            print i