初学者のためのプログラミング学習サイト算数12次のページ>>|チャンネル登録者数100人突破記念、算数チャレンジをプログラムで解く2019年05月18日カテゴリ:プログラミング算数はいどうも今晩は乙pyです。本日はまずYoutube登録者数が100人を突破いたしましたーーーーーーーきゃーうれスィーこんな底辺YouTuberですが登録者数1000人、1万人と目指して今後とも頑張って行きたいと思います。目標は日本国民全員がプログラミングできるようになることプログラミングたーのしーって思えるようになることを目指しておりますので引き続き皆さま動画の方をよろしくお願いいたします。動画はこちら今回は算数チャレンジです。算数チャレンジとは?昔GoogleのCMでこんなのが有りましたね。四つの数字を用いて組み替えて10になるような計算方法を考えましょうと言うもの。8これに+ー*/で答えを10にしましょう。実際これやってみると意外と大変なものです。これを自力で解くのは結構頭を使うので頭を使わないためにプログラムで解く方法を考えてみましょう(笑)。考えるべきはプログラムで使う部品です。4つの数字+-*/の記号これだけだと実は解けないんです。計算では優先順位があるので先に足すとかしたい場合はカッコが必要になります。用いることができないと算数の問題を解けません。言うことで部品を揃えて行きましょう。言語はPythonを用います。Python言語では分数の計算を行うことができるFractionと言うライブラリがあります。これを用いると通常は1/7など小数点になってしまい計算が合わなくなってしまうのを分数扱いできるので正しく答えを求めることができます。4つの数字は色々組み替える必要があるのでこの組み替えを行うためにitertoolsライブラリを用います。この二つをインポートしておきます。itertools次にそう考えていくかと言うと数式を作っていくことを考えます。1+2+3+4こんな感じで4つの数字と記号を三つ組み合わせる式になるはずです。加えてこれにカッコ()を付け足す形になるのでこのかっこのパターンを含めた数式文字列のパターンを用意してあげます。'(%s%s%s)%s(%s%s%s)']このようにかっこのパターンを用意してあげます。次に数式をどう組み立てるかと言うとこのパターンの%sの部分に数字と記号を当てはめて行きます。itertools.product('+-*/',repeat=3)これで記号の全通りの組み合わせを作ることができます。itertools.productはその文字数分だけ繰り返しが行われます。repeat=3なので3文字分の記号の組み合わせを作成します。itertools.permutations(QUESTION,4)文字の部分はこんな感じになります。permutationsで数字の順列を作成します。この7つの文字を先ほどのパターンに当てはめます。fd)これでfに数式が当てはまりました。あとはこれを計算するのですがこの変数fの値は文字列なので計算はできません。Pythonでは文字を数式として評価できるeval()と言う関数があります。これを用いると数式として計算ができるので作成した文字を数式として扱って計算した結果、10になったら答えとして、結果を保存します。結果はsetに格納して重複を排除しました。プログラムを組み合わせるとこんな感じになります。print(s)この答えは動画でご覧くださいませ。いかがでしょうか?お子さんがいらっしゃる家庭であれば宿題でこんな問題を色々やらされことがあるかもしれませんがこのプログラムであればQUESTIONの部分を変えてもらえばいろんな数字の答えを求めることができます。