The end of other
語訓練のために、私たちのロボットはサフィックス(接尾辞)について学ぼうとしています。
このタスクであなたは小文字の単語の集合(set)が与えられます。 ある単語が別の単語の末尾である(別の単語の接尾辞である)ような単語の対があるかどうか調べてください。 例えば: {"hi", "hello", "lo"} -- "lo"は"hello"の末尾です。したがって結果は真(True)です。
ヒント: このタスクのために集合(set)型で繰り返す方法と文字列データ型の関数に知っていなければいけません。 より詳しくはここの集合(set)型と ここの文字列関数を読んでください。
入力: 複数の単語、文字列の集合。
出力: TrueまたはFalse、ブール型。
例:
checkio({"hello", "lo", "he"}) == True
checkio({"hello", "la", "hellow", "cow"}) == False
checkio({"walk", "duckwalk"}) == True
checkio({"one"}) == False
checkio({"helicopter", "li", "he"}) == False
どのように使われるか: ここであなたは集合型で繰り返す方法と文字列型の関数について学ぶことができます。
事前条件: 2 ≤ len(words) < 30
all(re.match(r"\A[a-z]{1,99}\Z", w) for w in words)
def checkio(words_set): for b in words_set: for a in words_set: if a != b: if a.endswith(b): return True return False #These "asserts" using only for self-checking and not necessary for auto-testing if __name__ == '__main__': assert checkio({"hello", "lo", "he"}) == True, "helLO" assert checkio({"hello", "la", "hellow", "cow"}) == False, "hellow la cow" assert checkio({"walk", "duckwalk"}) == True, "duck to walk" assert checkio({"one"}) == False, "Only One" assert checkio({"helicopter", "li", "he"}) == False, "Only end"
接尾語にかんしてはendswithで調べられる。
str.endswith(suffix[, start[, end]]) 文字列が指定された suffix で終わるなら True を、そうでなければ False を返します。 suffix は見つけたい複数の接尾語のタプルでも構いません。オプションの start があれば、その位置から判定を始めます。オプションの end があれば、その位置で比較を止めます。
集合型の中のすべての文字の組み合わせについて調べる必要があるので、ループ2つでまわした。もちろん、自分を自分自身と比較しないようにした。
ただ、ループ2つって読みにくいのであんまり良い解答ではなさそう。
Clear
def checkio(words): """ You can iterate throught set. """ for w1 in words: for w2 in words: if w1 != w2 and (w1.endswith(w2) or w2.endswith(w1)): return True return False
一位の人もループ2つ使っているなぁ。ただ、組み合わせを同時に2つ調べて効率を良くしている。