ひらがなとナベアツ
ひらがな2文字が配列からランダムに選ばれて画面に表示される問題。
1つ目で選んだひらがなを除き、残りのひらがなの配列をシャッフルし乱数を求めて2つ目の乱数を求めればいいのか!
…でもそれを、プログラム上でどうやってやるのか、具体的なやり方がわからない私。
聞いてみたところ
1. 1文字目を記憶しておいて、2文字目を選んだ時に、1文字目と同じだったらやりなおし
2. 配列の要素を削除してしまう
っていう方法があるらしい(考えようによってはまだいっぱい方法あると思う)
こうやって考えればいいのかって思った。
日本語をプログラミングに翻訳してるイメージだなって感じた。
試しに2の方法でチャレンジ。なんかうまいこといった(参照サイトのサンプルコードのおかげ)
1つ目のひらがなを選んだ後、その選んだやつを配列から消して、新しく作り直した配列から2つ目を選んでくるって手順だった。
とりあえず、コードは書けたし目標としてた動きにはなったからこれはとりあえず終了(でも後でコードの見直しと関数の復習はやる)
次の問題は3の倍数と3のつく数の時はアホになるやつ。
FizzBuzzのおまけ付きバージョンってところかな。
3のつく倍数はFizzBuzz問題の時と同じ、3で割った時あまりが0になればOK。
問題は3のつく数字の時。日本語ならかけるよ、「3のつく数字の時」って。
でもこれ、プログラミングで置き換えるとなんて言えばいいんだ…?
indexOfとか関数使えばいいのかなって思ったけど使い方分かんないし、そもそもこの関数で合ってるの?って感じ。
ほんっと
この先大丈夫かな……って感じ。
Fizz Buzz
プログラミングで出力に至るまでの過程というか、流れを考えるのがすっっっごく苦手なので、今週は練習問題をいくつかこなしていく週。
アルゴリズムとか数学的、論理学的な考え方が苦手なうえ下手。
ほんとはカレンダー出力のやつとかやりたかったんだけど、今日の日付を取得するから先の過程が考えつかず、泣く泣く断念。時間とか西暦、日付の扱い方については次回のレッスンでお話していただく予定。
で、泣く泣く断念した後に取り組んだ問題がFizz Buzz。とっても有名らしい。私もなんかの本で見たことがある。
とりあえす1~30の数字まで出力してみた。無事実行。思ってたより簡単だった。for文とif文ができればできる。
次に取り組んだ問題はひらがな2文字を配列の中から2つランダムに選んで出力させる問題。昨日と今日で出力までこぎつける(先生のアドバイス付きで)
ひらがなの問題については次回にでも詳細を(眠いから)
8/1 まとめ
ここだけ見たんじゃよく分からないかもだけど、レッスンまとめを貼り付けます。見返したときに私にも分かるか分からない。
入力(あるときとない時がある)→出力(ゴール:結果とか目的にあたるもの)
四則演算なら
入力(入力フォームに数値を入れる、和差積商から1つ選択)→出力(選んだ通りの計算結果が表示される)
→この矢印の部分を細分化して考える!(フローチャートor日本語で過程を書き出すetc)
論理演算
命題…正しいか正しくないかがはっきりわかるのも。人のそれぞれのさじ加減で変わらないもの。真偽の二択(プログラミングならtrue,false)
例:1+1=2である…真 1+1=3である…偽
ポテトチップスはみんな好きである…人それぞれだから命題じゃない(私は好き(ピザポテトとサワークリームオニオン))
プログラミングで必要な考え方
・否定… ~じゃない× !
・論理和…~または~(or)||
・論理積…~かつ~(and)&&
プログラミングの基本
→目的は何??何がしたいのか??(出力、ゴールを決めるのが大切)
→ゴールにたどり着くにはどういう情報(データ)が欲しいのか、無くてはならないのかを考える
→手順(プログラム)を考える
ゴールから逆算して考える!!
うまく手順(プログラム)にできない時
→細分化して考えられてない証拠!もっと細かく考える、かたまりを考える
プログラムの動きは3つだけ!
・連接(上から下へ流れていく、上から順に実行)
・繰り返し(例えば0~10の数字までは同じことを繰り返すみたいな)
・条件分岐(if文の選択やYes/Noの二択、switch文の多岐選択まで、枝分かれ)
効果的なのは
・サイトやサンプルコードの写経
・実行して動きを確認
・サンプルコードを少しいじって実行(ここを変えればこうなるだろうっていう仮説を立てながら)
オブジェクトとかクラスとか
ProgeteのJavaScript IVトライ。
JavaScriptの学習コースは全部終わったと思ってたんだけど、そんなことなかった。
今日やったIVでは、オブジェクトとかクラスとか親クラスとか子クラスとか継承とか…etc、私がよく分かってないことがぎゅっと詰まってた。
前にRubyの学習コースで見たときはさっぱりだった。
でも、何と無くわかってきた…かも?
本とかサイトとかで少し調べてみたりしたのも効果あったのかもしれない。
そしてProgate。スライドが分かりやすい、優しい。
クラスは型番で、その型を元にものを量産していくイメージ。型番を使って作ったものが…えっと、、インスタンスだっけ?
たい焼き機がクラスで、そのたい焼き機を使って作られたたい焼きがインスタンスってこと??(分かりにくい)
型を元にものを作って、その作ったものはさらに手を加えることができる。
情報(プロパティ)とか、動き(メソッド)の追加もOK。
あと、関数とか引数の仕組み、基本が大切。
親クラスを継承して作られた子クラスは、親クラスのメソッドを引き継いでる。子は生まれた瞬間から親の力を譲り受けてる(強い)。
さらにそこから手を加えることもOK。情報(プロパティ)とか、動き(メソッド)の追加もOK。親と子のメソッドが被ったら、子クラスの方のメソッドが上書きされるらしい。子に甘いぞ、親。
こんなでも、概念というか、何となくの仕組みはわかってきた(はず)
何となくはわかってきたんだけど、ただやっぱり、複雑で、難しくって、言葉にできない。
目指せ、脱小田和正状態。
脱分岐
前回の続きから。
前回、エラー文を表示するところをif(isNaN()で書いてたから、他の条件をelse ifで追加で書いてみた。
案の定思い通りに動かなかった。
いや、何か、アラートでエラー文出てくるっちゃ出てくるんだけど、指定した条件通りに文が表示されなくて。。
色々試した結果、if(isNaN()使うのを諦めた。
代わりにif文でエラー文が出る条件をいくつか作った。もし、入力された数値が空欄だったり、半角数字以外だったら、それに合わせてエラー文を用意した変数に入れてね!みたいな。
で、そのif文の下にさらにif文を作った。
もし変数が空じゃなかったら(エラーがあったら)変数に入ってる文をアラートで表示してね、そうじゃなかったら(エラーがなかったら)計算していいよっていう感じのやつ。
これでとりあえず期待通りの動きをしてもらえるように!
…でも、もうちょっとコードをスッキリ書けそうじゃない?って思った。妙に長いし。でも今はまだ、その何と無く思ってることを形に出来ない。ちょっと悔しい。
あと、今更ながら変数って便利だなって思った。
数値も入れられるし、今回みたいに文章(文字列)も入れておける。しかも条件次第で入れる文章も変えられる。そのおかげで、後々、数値や文字列などの扱いが楽になることを実感(ほんとに今更)
変数のおかげで引数とか何かその辺うまいこといくんだなーって。
それと、引数とか関数とか演算子とかについては、もうちょっとちゃんと理解しないとって思った。
HTMLとCSSの復習がてら何か作りたい。
四則演算延長戦
数値が入ってなかったり、文字が入力されちゃった時は「ここがこうだから計算できませんよ!」っていうエラー文を表示させるやつ。
追加したのはこれ if(isNaN(num1 && num2))
コードは実行されたんだけど
ちゃんと数値が2つ入ってる時は計算ok、だけどそれ以外の時のエラーにはみんな同じ処理。
計算するかエラー文表示かの二択だけ。
ここがこうだからっていう場合分けに対応したエラー文を表示させられた方がいいよね。大文字小文字の区別とかも。
これには引数とか演算子が関係するみたい。計算の順番みたいなこと??数学っぽさが出てきた…
また明日、続きから。
さて、progateちょっとやったら寝よっと。
引き続き
JavaScriptの課題。
昨日書いた四則演算はとりあえず合格、やったね。
そして、さらに、ここに付け足しの課題。
数値で計算ができるのはそのままで、文字を入力しちゃった時の処理を追加。計算できないようにして、さらにエラー文を表示させるってコトかな??分岐点みたいな感じ??(if文使うとか)
どんなふうに処理を組み立てていくか考えないと。
知ってる関数に置き換えると、どんなふうになるか考えないと。
プログラミング的思考って難しい。プログラミングしてる人はどんな手順で考えてるのか知りたい。頭の中見せてって感じ。