Pangram
パングラム (ギリシャ語:παν γράμμα, pan gramma, 「すべての文字」) とはアルファベットのすべての文字が少なくとも一回使われている文です。ひょっとしたらあなたはよく知られているパングラム "The quick brown fox jumps over the lazy dog" をご存知かもしれません。
このミッションでは、私達はラテンアルファベット(A-Z)を使います。 あなたはラテン文字と句読点によるテキストが与えられます。 あなたはその文がパングラムかそうでないかをチェックする必要があります。大文字小文字は関係ありません。
入力 テキストが文字列として与えれられます
出力 文章がパングラムかどうかをブール値で返します
例
check_pangram("The quick brown fox jumps over the lazy dog.") == True
check_pangram("ABCDEF.") == False
どうやって使われるか パングラムは書体の表示、装置のテスト、手書きや書道やキーボードのタイピング技術を練習するものとして長年使われてきました。
事前条件
all(ch in (string.punctuation + string.ascii_letters + " ") for ch in text)
0 < len(text)
import string def check_pangram(text): text = text.lower() alpha = string.ascii_lowercase alpha_list = list(alpha) for x in alpha_list: if text.count(x) < 1: return False return True if __name__ == '__main__': # These "asserts" using only for self-checking and not necessary for auto-testing assert check_pangram("The quick brown fox jumps over the lazy dog."), "brown fox" assert not check_pangram("ABCDEF"), "ABC" assert check_pangram("Bored? Craving a pub quiz fix? Why, just come to the Royal Oak!"), "Bored?"
stringライブラリにascii_lowercaseっていう、出題そのまんまの関数があったのでこれをサクッと利用。
ASCII文字の小文字のリストを作って、それをループでまわしてcountで計測。
1個もない文字があった時点で、パングラムではないので、Falseを返す。
Clear 1位
from string import ascii_lowercase <200b>def check_pangram(text): return set(ascii_lowercase).issubset(set(text.lower()))
ライブラリの読み込み方
from string import ascii_lowercase
はstringオブジェクトのascii_lowercaseをローカルなシンボルテーブルに追加しますよって宣言
なので、直接 ascii_lowercaseを呼び出せるようになっている。
setは集合を扱う組み込み関数。
8.7. sets — ユニークな要素の順序なしコレクション — Python 2.7ja1 documentation
s.issubset(t) s <= t s のすべての要素が t に帰属していれば真を返す
とのこと。
スマートだなぁ。
speedly
from string import ascii_lowercase <200b>def check_pangram(text): return all(letter in text.lower() for letter in ascii_lowercase)
そうだ。どっかで、allって関数をみたけど、使い道までは知らなかった。確かに題意まんまの関数だ。返り値もブールだし。
all(iterable) iterable の全ての要素が真ならば (もしくは iterable が空ならば) True を返します。以下のコードと等価です: def all(iterable): for element in iterable: if not element: return False return True any(iterable) iterable のいずれかの要素が真ならば True を返します。iterable が空なら False を返します。以下のコードと等価です: def any(iterable): for element in iterable: if element: return True return False