1

関数usesは常に True を返します。正しくやれば12語しかない。

usesFalseを返すようにするにはどうすればよいですか?

def count_vowels():
    fin = open ('words.txt')
    count = 0
    vowels = ['aeiou']
    for line in fin:
        word = line.strip()
        if uses(word, vowels):
            count = count + 1
            print "There are", count ," words with a vowel."

def uses(word, vowels):
    for vowels in word:
        if vowels in vowels:
            return True
    return False

def count_words():                                
    fin = open ('words.txt')
    vowels = ['aeiou']
    for line in fin:
            word = line.strip()
            if uses(word, vowels):
                print word

count_vowels()
count_words()

#This is what returns in the shell when I run my code:

>>>There are 1 words with a vowel.
There are 2 words with a vowel.
There are 3 words with a vowel.
There are 4 words with a vowel.
There are 5 words with a vowel.
....
#and so on...

# However, if I use the following code to replace the middle function in my original code:

def uses(word, vowels):
    found = ''
    for l in word:
        if l not in found:
            if l in vowels:
                found += l
        else:
            return False
    return found == vowels

# When I run the code the shell returns this:

>>>
>>>
4

5 に答える 5

2

機能をそのまま使えるall!魔法を働かせましょう:

def uses(word, vowels):
    return all(letter in word for letter in vowels)

デモ:

>>> s = 'aieou cdeaiou fgeaihou test doesnt work'
>>> for i in s.split():
    print (uses(i, 'aiueo'))


True
True
True
False
False
False

これにより、 の代わりに のvowels文字列として渡します。"aiueo"['aiueo']

ただし、母音を順番に見つけたい場合は、次のようにします。

def uses(word, vowels):
    found = ''
    for l in word:
        if l not in found:
            if l in vowels:
                found += l
        else:
            return False
    return found == vowels

ここでは、ちょっとがっかりしますが、修正された完全なコードを示します。

def count_vowels():               
    with open('words.txt') as fin:
        count = 0
        vowels = 'aeiou'
        for line in fin:
            words = line.split()
            for word in words:
                if uses(word, vowels):
                    count = count + 1
                    print "There are", count ," words with a vowel."

def uses(word, vowels):
    return all(letter in word for letter in vowels)

def count_words():                                
    with open('words.txt') as fin:
        vowels = 'aeiou'
        for line in fin:
                words = line.split()
                for word in words:
                    if uses(word, vowels):
                        print word

count_vowels()
count_words()
于 2013-11-09T17:36:38.030 に答える
1

すべての文字がその順序である (ただし、間に他の文字がある可能性がある) 単語のみを探している場合はaeiou、最初の母音を見つけるまでチェックし、次に 2 番目の母音、次に 3 番目の母音と照合する必要があります。それらをすべて見つけるまで(または単語の終わりに到達するまで)。これを行うコードを次に示します。

def uses(word, vowels)
    vowel_index = 0
    for letter in word:
        if letter == vowels[vowel_index]:
            vowel_index += 1
            if vowel_index == len(vowels):
                return True
    return False

見つかった母音を削除するのではなく、現在どの母音に対してテストしているかを示す整数のインデックスを保持するだけです。

vowels内容として 1 文字の文字列を含むリスト、またはすべての母音を含む単一の文字列のいずれかの添字可能な値でこれを呼び出す必要があります。

于 2013-11-09T18:04:22.073 に答える
0
def uses_only(wrd_trnsv, str_chars):
    for chr_trnsv in wrd_trnsv:
        if chr_trnsv not in str_chars:
            return False
    return True

wrd_list = open('C:\\Temp\\Complete_Words_list.txt')
def uses_all_txt(wrd_list, req_str_chrs):
    count = 0
    for each_wrd in wrd_list :
        if uses_only(req_str_chrs,each_wrd):
            count = count + 1
     return count
于 2016-03-28T06:58:17.770 に答える
0

それが正しければ、次のような関数を実装しusesます。

def uses(word, vowels):
    # remove every letter, that's not a vowel, make the word lower case
    reduced_word = filter( lambda character: character in vowels, word.lower() )
    # check, whether the vowels are in order
    return vowels in reduced_word

vowels = "aeiou"

test_words = [ "atetitotu", "Atetitotu", "Haemodiutory", "FgeAihou" ]

for word in test_words: print word, uses(word, vowels)

出力:

atetitotu True
Atetitotu True
Haemodiutory False
FgeAihou False

しかし、ファイルのこれらすべての単語を見つけたい場合は、re-moduleをお勧めします。

import re
file_content = open('file.txt').read()
vowels = "aeiou"
# the pattern starts with word boundary and there can be any kind of letters at the beginning
pattern = r"\b\w*"
# than between every vowel there can be any letter, except of a vowel
pattern += (r"[^%s]*?" % vowels ).join(vowels)
# and then, after the last vowel there can be any letter before the word ends
pattern += r"\w*\b"
# here the result: pattern = r"\b\w*a[^aeiou]*?e[^aeiou]*?i[^aeiou]*?o[^aeiou]*?u\w*\b"
# now we look for this pattern all over the file, ignoring case
re.findall(pattern, file_content, flags = re.I)

出力は次のようになります

['atetitotu', 'Atetitotu']
于 2013-11-09T20:59:14.603 に答える
-1

@voidが言ったように、reモジュールを使用してください

import re
s = 'hello world'
words = re.findall(r'\w+', s)
print 'words'''
于 2013-11-09T17:35:14.933 に答える