0

単語のリストを調べて、文字 p、y、t、h、o、n のみを含む単語の数をカウントするプログラムを設計しています。

これまでのところ、私のコードは次のとおりです。

def find_python(string, python):
 """searches for the letters 'python' in the word."""
 for eachLetter in python:
    if eachLetter not in string:
        return False
 return True

def main():
 python = 'python'
 how_many = 0

 try:
 fin = open('words.txt')#open the file
 except:
     print("No, no, file no here") #if file is not found
 for eachLine in fin:
    string = eachLine
    find_python(string, python)
if find_python(string, python) == True:
    how_many = how_many + 1#increment count if word found
 print how_many#print out count
 fin.close()#close the file

if __name__ == '__main__':
main()

ただし、私のコードは間違った単語数を返しています。たとえば、python という文字が含まれているため、print ステートメントを入力すると、「木琴奏者」という単語が返されます。禁止文字を含む単語を拒否するにはどうすればよいですか?

4

3 に答える 3

3

テスト関数を修正します。

def find_python(string, python):
 """searches for the letters 'python' in the word.
    return True, if string contains only letters from python.
 """
 for eachLetter in string:
    if eachLetter not in python:
        return False
 return True
于 2013-02-09T04:28:46.003 に答える
0
from os import listdir

def diagy(letters,li):
    return sum( any(c in letters for c in word) for word in li )

def main():
    dir_search = 'the_dir_in_which\\to_find\\the_file\\'
    filename = 'words.txt'

    if filename in listdir(dir_search):
        with open(dir_search + 'words.txt',) as f:
            li = f.read().split()
        for what in ('pythona','pyth','py','ame'):
            print '%s  %d' % (what, diagy(what,li))

    else:
        print("No, no, filename %r is not in %s" % (filename,dir_search))

if __name__ == '__main__':
    main()
于 2013-02-09T04:53:20.967 に答える
0

正規表現へようこそ:

import re
line = "hello python said the xylophonist in the ythoonp"
words = re.findall(r'\b[python]+\b',line)
print words

戻り値

['python', 'ythoonp']

実際の単語 python が何回出現するかを知りたい場合は、re.findall(r'\bpython\b')

このルートに行きたくない場合は、文字列の文字のいずれかが p、y、t、h、o または n でない場合は false を返すことをお勧めします。

于 2013-02-09T06:54:53.960 に答える