・コード
def LongestWord(sen):
# code goes here
array=sen.split(" ")
sen=array[0]
for i in range(1,len(array)-1):
if(len(array[i])>len(array[i-1])):
sen=array[i]
return sen
# keep this function call here
print LongestWord(raw_input())
・チャレンジ結果
・問題点
フィルタリング失敗のケース:
1. 一番長い単語が最後にある場合
2. 単語に記号をくっつけた場合
・改善点
1.
for i in range(1,len(array)-1):
to
for i in range(1,len(array)):
2.
先頭に以下のコードを追加し、記号をフィルタする。
sen = sen.translate(None, "~!@#$%^&*()-_+={}[]:;'<>?/,.|`")
さらにもう一つの間違いを発見した。
if(len(array[i])>len(array[i-1])):
to
if(len(array[i])>len(sen)):
・修正後のコード
def LongestWord(sen):
# code goes here
sen = sen.translate(None, "~!@#$%^&*()-_+={}[]:;'<>?/,.|`")
array=sen.split(" ")
sen=array[0]
for i in range(1,len(array)):
if(len(array[i])>len(sen)):
sen=array[i]
return sen
# keep this function call here
print LongestWord(raw_input())
・答え
def LongestWord(sen):
# first we remove non alphanumeric characters from the string
# using the translate function which deletes the specified characters
sen = sen.translate(None, "~!@#$%^&*()-_+={}[]:;'<>?/,.|`")
# now we separate the string into a list of words
arr = sen.split(" ")
# the list max function will return the element in arr
# with the longest length because we specify key=len
return max(arr, key=len)
print LongestWord("the $$$longest# word is coderbyte")
- for文で比較するほかに、max関数でそのまま一番長い単語を取り出すこともできる
- 「return max(arr, key=len)」: max関数内でkeyを指定することにより、arrそのものを比較して最大値を選ぶのではなく、arrの長さlen(arr)で比較することになる。
- 文字列置換用の関数について:
こちらのブログをご参考ください
note.nkmk.me
・感想
自分のプログラミング力が低くなっていると感じました。また、コードの厳密さを確保するのが難しいと感じました。厳密さが欠くとプログラムの脆弱性につながるので今後はプログラミングにより多くの力を入れていきたいと思います。