-1

文字列にアルファベットのすべての文字が含まれているため、関数が True を返す場合、文字列がPangramであるかどうかをチェックする関数です。str1 == 'the quick brown fox jumps over the lazy dog'

import string

def ispangram(str1, alphabet=string.ascii_lowercase):
    for char in set(alphabet): 
        if char in str1:
            return True
        else:
            return False
4

8 に答える 8

3

で最初の文字が見つかるとすぐにstr1、関数は を返しますTrue

代わりに行う必要があるのは次のとおりです。

def ispangram(str1, alphabet=string.ascii_lowercase):
    for char in set(alphabet): 
        if char not in str1:
            return False
    return True

このように、関数は、 が含まれていないFalse場合にのみ、すべての文字が含まれていることが判明した後にのみ戻ります。charstr1str1True

str1.lower()小文字のみをチェックしているため、を使用することをお勧めします。

于 2020-06-09T18:12:30.690 に答える
1

これはあなたとは異なるアプローチです:

import string

def ispangram(str1, alphabet=string.ascii_lowercase):
    return len(set(l.lower() for l in str1 if l.lower() in alphabet)) == len(alphabet)

print(ispangram("I am very tired, but I will keep programming to pass the quiz!"))

出力:

False
于 2020-06-09T18:15:09.183 に答える
0

関数は、 の最初の文字をチェックした直後に戻りalphabetますstr1。実際、あなたの関数は、アルファベットの文字が文字列に含まれているかどうかを単純にチェックします。

あなたが意図したことは次のとおりです。

import string

def ispangram(str1, alphabet=string.ascii_lowercase):
    for char in set(alphabet): 
        if char not in str1:
            return False
    else:
        return True

ただし、はるかに簡単な解決策は次のとおりです。

def ispangram(str1, alphabet=string.ascii_lowercase)
    return set(str1) >= set(alphabet)
于 2020-06-09T18:14:42.150 に答える
0

文字列にアルファベット文字が見つかった場合、関数は True を返します。それはあなたが望んでいたものですか?の車を通過しset(alphabet)、文字列に車が含まれているif char in str1場合は True を返します。それはあなたの目標にはあまり役に立たないようです。おそらく、文字の順序をチェックする、より複雑なロジックが必要な場合があります。回文を見ている場合に、文字列を反転したときに文字列が同一であるかどうかなどです。これが参考になることを願っています!

于 2020-06-09T18:11:12.723 に答える