しーなのたらたらプログラミング学習日記

よれたOLの、びみょーなプログラム学習日記です

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