新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

cametan_42さんの練習問題fiveをRubyで書いてみる。追記あり。

2021-10-06 16:45:54 | Ruby

cametan_42さんがPythonのリスト内包表記の練習問題の回答含みで書いてます。今回は5回目。

cametan_42さんの回答は、meanとかfloorの使い方を知らないと書けないコードですね。1行に収めて、from句除き、良い見本の回答ですね。

 一方の自分の回答は、悪しき見本の回答(笑)sumを使えば、配列の合計を出してくれますが、やたら滅多に配列を作らないのが、イマドキ風らしいです。それともRubyは配列を使うことを、拒まない。配列を作らないのが、一番先にありますが、合計をしてますので、手続き風ですね。Rubyでcametan_42さんの回答のように書けるんでしょうか?

 カッコいいコードを教えてもらいました。class Fiveにしてみました。コードはそっくりそのまま頂きました。(御礼)

 VS Codeだと、何故か?デバッグと入力のあるスクリプトを実行できません。Rubyだけだと思います。設定がごちゃごちゃしてますので、どこかで間違ってるかもしれません。RubyはEclipseを使います。

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

cametan_42さんの練習問題fourをRubyで書いてみる。

2021-10-05 20:02:35 | Ruby

cametan_42さんがPythonのリスト内包表記の練習問題の回答含みで書いてます。今回は4回目。

 cametan_42さんの回答を少しだけ変えました。def four()は、リストを返すので、リストの最後を取り出す、pop()が欲しいようです。:=はセイウチ演算子というようです。初めてみました。リスト内包表記でなければ、普通にini = ini * iで良いと思います。意味は同じでしょう。

 Pythonのリスト内包表記のように書けるかやってみましたが、collectとmapでは見つけられませんでした。結果的にfour()を呼ぶことになりました。ここでも、帰ってくるのは、配列です。最後の一つだけ取り出すのであれば、foo.lastのようになるようです。

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

cametan_42さんの練習問題threeをRubyで書いてみる。追記あり

2021-10-04 22:18:12 | Ruby

cametan_42さんがPythonのリスト内包表記の練習問題の回答含みで書いてます。今回は3回目。だんだん難しくなりそうです。

「Rubyプログラミング入門」では、mapの記事がないと思ってました。「初めてのRuby」で調べたら、mapの事がありました。20年前の本と13三年前の本で、変化があったようです。しかし、どうでしょう。collectとmapの実行結果、全く同じです。

 単純置き換え版では、ほぼ思考ゼロで書き換えできます。collect版では、cametan_42さんからRubyらしく書くサジェッションを頂いたので、ややスマート?に書けたかもしれませんし、データそのものを返すのが、最近の流儀とかですので、そうしてみました。

 Rubyでrangeを指定するとき、(1..8)と(1...8)少し意味が違うようです。(1..8)と同じ意味は(1...9)です。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

cametan_42さんの練習問題twoをRubyで書いてみる

2021-10-04 09:53:59 | Ruby

 問題は3の段ということでした。出力が長くなるので、例えば3x5までならtwo(3,5)となります。この場合の最初の引数のデフォルトは省略できないようですので、nは必ず指定することに変わります。少しだけ問題を変えました。

 mapは「Rubyプログラミング入門」H12年出版にはないので、その後出来たんですかね。

コメント (5)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

リスト内包表記、終わったつもりでしたが…。

2021-10-03 20:33:09 | Ruby

cametan_42さんが、練習問題と回答を載せてますので、それに従って、もう少し見てみようと思い直してます。回答は出てますので、Rubyでやってみます。

上では、ansは配列です。Pythonのリスト内包表記のリターン値で、良いのかなあ?リストなんでしょうね。

cametan_42さんのブログから、コピペしましたが、def oneの2行目は先頭削除して、タブを入れたらOKでした。

 Eclipseでは、VS Codeのコピペで動きませんし、リスト内包表記がそのものが受け付けてもらえなかったので、普通の関数にしたら、OKでした。iが使われてないと、warning出てます。インタプリタが古いのかなあ?

 

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

またまたfizzbuzzの登場、RubyとPython、追加あります。

2021-09-30 15:52:02 | Ruby

 上はPythonの教科書の例です。最後の1行は、追加しました。結果は、文字列のリストなんでしょうが、resの初期化は自動でしてるみたいですし、リストの追加も、暗黙でしてるようです。

Rubyのifは式でもある、そうです。elsifを使える場面では、使ったほうがendが少なくすることが出来るようです。

普通に配列に押し込んでます。printは前に書いてますが、要素を1個づつ取り出してる感じです。(0...20)は間違いで(1..20)です。点の数で意味が違います。

if文でthenが有ってもなくても意味は同じ様です。

 三項演算子を使って、押し込んでみました。エクセルの関数でこんな感じでやりますね。エクセルの関数は1行で表さないといけません。セルに書く関数です。pとputsは動きが違うようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

RubyとPython比較してみました。配列とリスト

2021-09-25 10:11:13 | Ruby

リストは[]で囲われてると思いますが、その中に式らしきものが書けるようです。

 Rubyでは配列内包記法というものは無いようです。collectとかfind_allとか、関数ですか?あるみたいです。ちょっと驚いたのが、一番最後でputs()の中にprintを入れて、大丈夫なんですね。4行が1行になった?自分はデバッガがないと、何も出来ないので、むしろ途中を見るためにワーキングの変数を入れてしまう方です。悲しい。

 Rubyではlambda{…}、proc{…}、Proc.new{…}は同じ意味を持つようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyで素数のジェネレータ?見つけましたが…

2021-09-22 06:54:16 | Ruby

 n+=1 whileのとこが分かりません。whileはある条件のうちは、繰り返しを行うものですから、条件と繰り返しの部分が逆に成ってませんか?n+=1の後に改行を入れるとエラーになります。もしcametan_42さん、読んでくれてるなら、教えてもらえませんか?

 それとClassの定義で[]があるのですが、コメントにしても大丈夫のようです。何故、関数にしてるのでしょうか?

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyをイジって、遊んでました。lazyとは?どんなもんでしょう?

2021-09-20 09:13:07 | Ruby

 lazyでエラーにはなりませんでしたが、効果は分かりません。CreateAry(100)で100個の要素を持つ配列が作られます。この場合のlazyでは、例えば、最初の候補が0でそれを対象にしての処理ではなく、一旦すべての要素の配列を作ってしまいます。それを処理しますので、自分的には0を処理してから、次の1の処理に行くのが、遅延評価と思ってました。

 それを実現することは、可能なんでしょうか?配列を対象にするのが、行けない原因のようにも思えます。

 Pythonのyieldとは、かなり雰囲気が違うようです。遅延評価とは関係無いようです。展開されることと関係してるみたいです。連番から偶数の取り出しを四苦八苦してました。配列のような、実態がハッキリしたものは、分かりやすいですが、実態のないものの処理は、なかなか理解できないですね。

コメント (5)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyで遊んでました。日付クラスの配列

2018-03-20 21:35:47 | Ruby

Day.rbは前と同じです。確かに配列になってるようです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyで遊んでました。日付クラスの比較

2018-03-20 20:42:40 | Ruby

 Day.rbでdef setMYDがあります。year = yでは駄目でした。@year = yとしないとinitializeが呼ばれてました。def ==(other)が無いとオブジェとのアドレスが比較されるようです。この場合も等しくないとprintしてました。

 実はAndroid Studio3を弄ってました。参考のサイトを探してやってみてもどうもうまくいきません。Studio3自体はまともなんでしょうが、結構変更が起きてるらしくて、参考の通りで動かないです。何もしないでプロジェクトを作って、エミュレートは動きます。しかし少しでもコードを入れるとエラー続出。Studio自体はJavaらしいですが、それと互換性があるのか無いのか?kotlinとかいう全くなじみのない言語も出てきて、手に負えません。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyで遊んでました。日付クラス

2018-03-14 17:05:19 | Ruby

def setYMDを追加しました。

 

attr_accessorを指定してるので、obj.yearとか書けるようです。

 

xobj = objとかは普通書いてはいけませんね。オブジェクトは一個しかないのですからね。注意です。

 

普通はオブジェクトはobj = Day.new()やxobj = Day.new()と確保しておくのが、無難ですし、そうするのが正道なんでしょうかね?

 

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyで遊んでました。日付クラス

2018-03-13 17:33:25 | Ruby

 

 柴田望洋先生の「明解Java入門編」9章から、難しいことばかりでは面白くないので、答えが本に書いてある、例題をやってみることにします。gy,gmにハッキリ見えませんが、波線アンダーラインが引かれてるんですが、何故ですかね?year,month,dayは計算できないようです。getYear等のようにto_iしておかないと、/でエラーが出ました。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyで遊んでました。primegen.rbから変更で出来たクラス。フィボナッチ数列

2018-03-13 12:57:33 | Ruby

 フィボナッチ数列数列は、前々項目と前項目を加算したものです。配列で言えば3個目からはそれで良いんですが、問題はその前です。each doでは最初のList[0]やList[1]の場合はどうなってるんでしょうか?

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Rubyで遊んでました。primegen.rbの変更から出来るクラス

2018-03-13 10:08:49 | Ruby

初項はdef initializeで設定します。次項は前項*2です。後は弄らないで10000を超えたら終了。印字は超えません。

 同じようなものですが、初項と比率、この場合は2を指定します。次項はsucc(y)で決めますが、yの値は@keisuで、initilizeで与えます。今回は個数で制限しました。このアルゴリズムでは配列の最初から処理の対象になるので、例えばフィボナッチ数列とかは前項目と前々項目を加算していくので、どうすれば良いんでしょうかね。このままList[-2]とかやるとnilが参照でしょうね。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする