二重ループですね。8行目が注目です。lambdaのx,yは文字でも使えそうです。
この例では、数字を文字に変えてますが。
二重ループですね。8行目が注目です。lambdaのx,yは文字でも使えそうです。
この例では、数字を文字に変えてますが。
class使ってみました。def show_aryは、またインデックスを使う羽目になりました。
これをlambdaとreduce使って書ければ、最高かもしれません。
ちょっと昔の話ですが、領収書の金額などは普通の数字と書き方が違いました。それをやってみました。
ローマ数字に直すのが、結構トリッキーに思えたので
これなら思いつかない自分でも、やれそう。と思ったんですが。
説明は要らないと思います。かなり普通の考えです。
一応は万単位までは良いと思います。それ以上はどう書くのかも知りません。
Pythonでは変数の型もないので、切捨てて欲しいときはintが欲しいようです。
もともとはイテレータを見てみていたんですが、それだけでは
書けない状況が、自分では発生します。18行目。
前回も出力画面で最後の「,」を取る場面など。でもインデックスによる
参照はout of rangeが出る可能性もあります。Cなどでは暴走に直結します。ですので
避けたいのですけどね。
Pythonでは、リストは[ ]で囲めば出来ます。二次元だったら二重になります。
Pythonのforは、本来なら2行目のように使うのだと思いますが
出力にあるようには、書けないんでか?
仕方なくインデックスを使いました。
10行目のように書けますが、多分ですがprint(i[j])をブロックのようには出来なかったと思います。
cov_to_integer3とfooは同じ機能ですが、strを先頭から見ていくのか?最後から見ていくのかが違うようです。
calcは減算の要素がない場合は、これでも答えは合います。
calc2はcov_to_integer3とfooが引数に文字で与えますが、チェックのため同等の整数のリストを
与えます。
演算にifが入ってくると、分からなくなりますね。
calcみたいに、単純だと混乱しませんが、やはり基本の理解が足りないのかも知れません。
まだ良く調べてませんが、例題の時はうまくいきました!。
リストは1個だけです。
ローマ数字はゼロがないとか?桁の概念がないんですね。
フランス語もそうだとか、聞いたことがあります。
一応は終わりにします。
今回はreduceを使ってみましたが、上のようにリストを4個使ってます。
reduceを使うのには、リストが必須ですかね?
必須として、同じリストを加工して、最後のリストだけに出来れば良いかもですね。
出力を見てもらえば、やっていることが分かると思います。
r_num_strは問題の文字列。
r_num_aryは問題の文字列を文字として、リストにします。
r_num_intは上のリストを数値の配列に置き換えます。
sign_aryはその数値が加算なのか?減算なのか?調べます。
簡単に言えば、数値のリストを右端から見ていって、左隣が同じか大きい場合は加算。
多分初期値の一番右端は、加算で間違いないと思います。
小さい場合は、減算。16行から24行がその部分で、肝です。
Dive into Python3ではローマ数字の妥当性もチェックしてますが、正規表現が自分にはディフィカルトです。(笑)
昨日、ドジャース対レンジャース見たんですが、山本由伸選手、浮足立ってました。
1イニング5失点でマウンドから降りました。コントロールも出来ていなかったし、甘い球は
ホームランは無かったですが、ボコボコでした。次回は修正して、抑えてほしいですね。
最後まで見ませんでしたが、5失点がのしかかり、ドジャースは負けたでしょう。
大谷翔平も試合後は無口で、LAへ向かったようです。
Dive into Python3を読み進めると、ローマ数字からアラビア数字へ変換する正解(と言って良いでしょう)が有りました。
ここは自分なりの、答えを出してみたくて、やってみたのですが、稚拙そのものですね。
やっていることは近いようにも思えるのですけど。
15行から34行が4行から13行と同じことをしてると思います。
アルゴリズムには、思いつかなかったので、ネットを探してみました。
dictを使ったスマートなのが、ネットから拾ったものです。
dictは、辞書型のデータなんでしょう。意味的には
conv_to_integerのmatch、caseで書いているところなんでしょう。もっとスマートに書けけると思いますが。
ここでの実行結果は同じですので、多分良いと思います。なかなか配列、Pythonではリストですが、
抜け出せません。(笑)
上が該当のプログラムが正解を出しているか調べるところのようです。
上がチェックしたいプログラム。
エラーがないと、一番上のデータが書かれている5件について調べて、OKと表示されます。この場合は
前もって調べてますので、エラーは無いのですが、間違ったデータの場合はどうなるか?
6行目でチェックデータを間違えてみました。
処理の中断はないようです。処理は正常でした。が、エラーが起きていることが解ります。
3行から11行で普通に書いてみて、13行から16行で詰め込んでみました。
leapとleap2は同じ結果のようです。1900から2024までは、多分。
確かに、エクセルのセルに書く場合と似てますね。一行に絶対書かないといけないですからね。
VBAを使えば別です。
以下はDive into Python3日本語の例題そのままです。
例題では、チェック用のデータ、known_valuesが一杯有ったので、中抜きです?
roman1.pyはチェックされるコード。
ターミナルにOKと表示が出てますので、すべてのデータでOKだったことが解ります。
あとは自分のデータでやってみることですが、ローマ数字からアラビア数字に直す方法が思いつかないので
違うものを考えます。
出力にも結果が出る、メニュー右上三角から実行しても、OKと出ます。
前の書き込みで、Cametanさんからリスト(一般には配列)にも10行のように代入できると
教えてもらいました。自分は、何か勘違いをしていたようです。
10行目の書き方は、スマートですが、14行から16行でも良いでしょう、でやってみました。
短く書けるものは短く書くのが、Cametanさん流のようです。
何しろ自分はデバッグを楽しむ派ですので
一旦は長く書く、出来上がったら、短く置き換える派なんです。(笑)
知っている範囲でですが。(笑、笑)
reduceは使うときに、from functools import reduceが必要のようです。1行目。
map、filterは付いてませんが…。
5、6行目でlambdeを変数に代入してますが、配列に代入してみました。出来ないようです。その違いが
分からなかったです?
reduceはListの処理をしますが、結果は1個ですね。出力の1段目と2段目。
mapは1個目のパラメータの関数を2個目のパラメータのListに適用します。結果はListと
あったんですがprint(m)で、上手く表示されなかったと思いますが?出力の3段目。
filterは14行から17行より20行目のほうが、慣れれば良いかも知れません。
14行目から21行目。
感想)関数型プログラミングと言って良いのか?はループ処理を嫌うようです。ループさせるとミュータブルな変数を使う必要があります。
変更させないイミュータブルなオブジェクトを使うことが関数型プログラミングに通じるみたいです。
そんなことが自分が覚えた頃にはなかったと思います。今でもミュターブルとイミュータブルを混乱します?