我需要编写一个程序来提示用户输入一串禁止字母,然后打印不包含任何字母的字数
这就是我所拥有的:
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 关键字,则会打印所有具有特定字符串的字词。但是当我使用不在时,它的工作方式不同。
答案 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