Chapter19:文字列の操作(各単語を後戻り):スライスとjoin()
どうもどうも、こんにちは、しーなです、よれよれです><!
体調が悪いところに、連チャンでひやおろしさんを飲んだので。。 。
こてこてよれよれ状態の連休3日目。。。
おかしいゾ。
そろそろ暑さも治まってきたので、
この4連休は、運動習慣を再開かなーと思ってたの。
スイッチのズンバさんとか、フィットボクシング2をやったり
きれきれの休日にする予定だったのだけど
(まあ、目標なだけでたぶん億劫だからやらなかったと思うけどw)
気が付いたら、
明日で連休終わりじゃん!!!
・・・・お勉強の1つくらいしとくか。
ということで、お題をとくよ・・><
checkio home 各単語を後戻り
問題:すべての単語を逆にする必要があります。
backward_string_by_word("") == ""
backward_string_by_word("world") == "dlrow"
backward_string_by_word("hello world") == "olleh dlrow"
backward_string_by_word("welcome to a game") == "emoclew ot a emag"
解き方
- textを単語で区切ってforで回して、さらにforで逆にして格納する?
- reverse()を使用する?
最初の答え
def backward_string_by_word(text): if text=="" :return ("") ltext=text.split(" ") moji="" newl=[] for words in ltext: moji="" for x in reversed(words): moji+=x newl.append(moji) newl=" ".join(newl) return(newl)
パスはしたけど長いし、すっきり書くにはどうしたらよいのか。
forで文字を集めていくところは1行でできそうなんだけど、
それを文字列全体に対してするのってどすんの・・・?
と、ほかの人のsolutionをみたら、すばらしい!1行だよ!
- ほかの人の素敵solution
def backward_string_by_word(text): return " ".join(word[::-1]for word in text.split(" "))
ええと。。。しかし、どうして1行???
分解して考えてみよう・・。
new=text.split(" ") data=[word[::-1]for word in new]
区切った文字列を、単語ごとさかさまにしてdataに格納。。。
なるほど、それを一度にjoinでまとめるの・・・か・・・。
いやはや、中身はわかったけど・・・
こんなん書ける気しないねっ☆
うーん、そうですねぇ・・・
とっても成長したとしてもーーー・・・
def backward_string_by_word(text): new=text.split(" ") data=" ".join(word[::-1]for word in new) return(data)
目指すはこんな感じかなぁ。。。
それも厳しそうだよなぁ。。
いやー、最後joinで組み合わせるとこで、一壁あるからさ。
そこを超えていけるかどうか、それが問題だだだ!w