プログラミング言語一覧

Python基礎学習③

こんばんは。

本書にてライブラリとクラスについて学び終わりました。

まずクラスについてですが、C++と違ってprivateなメンバ変数というのが厳密にはないというのに驚きました。

変数の前にアンダースコアを2つ付ければ、private変数ということにする等、クラスのカプセル化を運用で回避というのが、C++とはすごく違うなと。
C++はこういった定義は厳密にされていたので、この辺はC++の考え方がしっくりきますね。運用で回避というのは間違いが起きる元ですもんね。

しかしPythonではPEP8というコーディング規約の考え方がプログラマーの方やIDEにもしっかりと浸透しているみたいなので、問題ないのかな?この辺もまたC++のコーディングの仕方がプログラマーそれぞれで違うという自由な感じと違うところですね。

クラスの継承については「子クラス(親クラス)」で記述がすむので、分かりやすくていいなと思いました。C++は継承もprivateなのかpublicなのかprotectedなのか、どう継承するか選べますもんね。

なんでも自由に細かく決めれるC++はやはり上級者向けだったのですね。
私もいずれはC++を使いこなせるようになりたいものです!

 

ライブラリについては最高によく出来た仕組みだなと感じました!

C/C++でいうとこの#includeみたいなノリなのでしょうけど、いろいろな種類のライブラリが気軽に使えてなんと便利なことでしょう。

GUIのプログラムを作るならこのライブラリ、Webアプリを作るならこのライブラリ、画像処理するならこのライブラリとなんでもあるし、使い方も簡単だし、すごいです!

C++でもこういうライブラリ群が気軽に使えればいいのにねー。

ライブラリをインストールする方法もIDEのコンソール画面で「pip install ライブラリ名」で勝手に取ってきてくれるし、すごく楽ですね!

ちなみにC++でプログラムを作っていたときにはまった時間取得もPythonの時間ライブラリで簡単に取得できました。

Pythonは簡単だけど、本格的なプログラミングも可能というのはこのライブラリが豊富にあることと使いやすいということが支えているんですね。

さて、ひとまずPythonの基礎的な文法や仕様について学習し終えました。
PythonにはポインタやテンプレートやSTLがなかったり、C/C++より細かい部分の覚えることが少なくて、基本的なことだけでいえばぼちぼちやっても2週間くらいで学習を終えれました。

Pythonでは作りたいアプリは大概作れることを知りましたが、私としては人工知能を作りたいということで、当初の道筋通り進んでいきたいと思います。


Python基礎学習②

こんばんは。

前回print()関数を使って画面に出力するところまでいきました。

そこからさくさくと本書の学習を進め、データ型の基本、制御構文、関数の作り方まで進みました。

データ型にはC/C++になかったタプル型やら辞書型など見慣れぬ単語がありましたが、全体的にはC/C++の型より圧倒的に少ないなという印象を受けました。

C/C++では数値の型だけでもint ,short int,long int,unsigned int 等々まだまだたくさんありましたが、Pythonではint,float,あと複素数型の3つのみとのこと。(複素数型は紹介だけで、解説はされてなかったです)。

C/C++みたいに各型のバイト数までは載っていなかったので、細かいことは気にするなということでしょうか。
それにしても選択肢が少ないのは初学者にとってはいいことですね!
C/C++の型は何を使うのが最適なのか多すぎて分からないですもの・・・

制御構文についてはif-else文、for文、while文とそこまで変わりはないっぽいですね。あ、elif文という見慣れぬものはありましたね。
ifとelseの条件の中間という立場の文ですのでそこまで変わったものではなかったです。

関数についてはC++のクラスのメンバ関数みたいだなといった印象を受けました。普通の関数にデフォルト引数を設定できるのと、通常の自分で定義した変数で「変数.関数()」の形で使えるのでそう思いました。

Pythonデータ型定義や関数定義はどちらかというとC++のクラスの考え方で作られているのかな?
例でいうとPythonのstr型はC++のstringクラス、Pythonのリスト型はC++のvectorクラスみたいなね。

まぁなんにせよ、C/C++学習のときは関数定義のところで躓いていましたが、Python学習では難なく理解することができました。

この調子で進んでいくぞ~。

 


Python基礎学習①

おはようございます。

初めて朝にブログを書く気がします。
5時起きを目指していつも起きるのですが、大体6時くらいになってしまいます。

今日はなぜか4時に目が覚めたのでそのまま起きて朝から勉強し、ひと段落着いたので、ブログ更新します。

Pythonの基礎的な文法等学ぶ為にはまず環境作りから入らなければなりません。

先日買った参考書でも環境作りについて紹介されていました。

しかし、Webで調べてみるとPythonのIDEで最優良なのは「PyCharm」との情報が多数ありました。

どうせ使うなら最優良のものがいいので、「PyCharm」を使うことにしました。

【Python入門】PyCharmが最強おすすめのIDEだ!

こちらの記事を参考にインストールしました。
この記事通りにすると日本語化にもできたので、おすすめです。

またライブラリパッケージとして「Anaconda」というものもWebでの評価が高かった為、インストールしてみました。

これで環境は整いましたので、早速使用してみました。

VisualStudioと似通った感じですが、VisualStudioとは違ってコンパイル方法も分かりやすく、またコンパイル結果も下部にぱぱっと表示され、今のところは使いやすいなといった印象です。

ひとまず、最初に習う文法としては文字の出力ということで「HelloWorld」を出力してみましたが、すごく簡単ですね。

print()だけでいいんですね。

C/C++は#includeやらmain関数やら書いた後にprint関数で出力でしたので、手間が全然違う。

Pythonはプログラミング入門に最適な言語というのをどこかの記事で見ましたが、こういう文法的なところが簡単ということなんですかね。

結局ある程度のレベルまでいったらプログラムの組み方等に悩むことになるので簡単なのは最初だけでしょうね・・・(笑)

しかし、こんな感じでほかの文法も簡単なコードでいいのであれば、文法間違いに悩まずコーディングに集中できそうですね!

C/C++の文法はある程度理解しているはずなので、これほど簡単な文法ならばさくさく学習が進みそうです。

さくさく進めていきます!


Pythonを始めてみた

こんばんは。

先日、子供と「Scratch」をしたことで、「C/C++」以外の言語に興味がわきました。

そして「C/C++」以外で兼ねてから興味を持っていたプログラミング言語
「Python」を始めてみることにしました。

このブログのテーマでもある人工知能作りですが、今人工知能やAIプログラミングで流行っている言語がこの「Python」
私はその流行りに乗らずに「C/C++」を学習していたのですが、どうも人工知能作りにまで発展しそうにないので、「C/C++」での人工知能作りはいったん諦めます。

その代わり人工知能作りの情報や書籍が豊富にある「Python」で再度チャレンジしていきたいと思っています!

早速入門書を買ってきました。

ひとまずは本書で「Python」の言語の仕様を学ぶとして、そこから先をどのように学習していくかが重要ですね。

「C/C++」を勉強していたときは言語仕様をさらりと学んだあと、人工知能とは関係のないアプリの作成やら、再度言語仕様の学習をしたりと、まぁそれはそれは計画的な学習とはいかなかったので、今回はその反省を生かし、ある程度は計画的に順序立てて学習していきたいと思っています。

そこで情報豊富なことを利用し、いろいろと調べてみたところ、以下のサイトの学習の仕方が理に適っていそうでした。

追記 Pythonや機械学習がオンライン上で学べるAI Academyをnoteでも書きましたが、3/17日からほとんどのコンテンツを永続的に無料で利用できるよう致しましたので、是非この記事と合わせて使って頂けますと幸いです! ...

こちらの記事を書いた方は
「AI Academy」
https://aiacademy.jp/
というAIプログラミングの学習サイトを運営しているとのことで、このサービスも並行して利用しつつ(もちろん無料版でw)学習を進めていきたいと思います。

少しばかり本サイトを利用してみましたが、学習コンテンツがすごく豊富でこの全てを吸収すればこのサイトだけでAIプログラマーになれそうな感じです。

私は覚えが悪いので、書籍とWebのさまざまな情報も利用しつつ学習をしていきます(笑)

「C/C++」の学習も楽しんでいましたが、「C/C++」だけでは人工知能作成という目標があまりにも遠すぎると感じていましたので、これからの「Python」学習で気持ち新たに頑張り、そして楽しんで目標に向かっていきたいと思います!


Scratchを試してみた②

こんばんは。

Scratchを使って子供と簡単なプログラミングをしておりましたが、サンプルプログラムを完成させました。

子供からしたら慣れないマウス操作に苦労していましたが、最後まで諦めずに完成できました。

子供も「次は何作るの!?」と飽きた感じではなさそうでしたので、また別のサンプルプログラムでも一緒に作ってみようと思います。

この調子で子供にプログラミング勉強をさせていけば、将来有望な人材になりそうですなw

私も負けじとがんばらなければ。


Scratchを試してみた

こんばんは。

テレビ番組やネットニュースを見ていると、多々目にする。子供のプログラミング必修化。

私は現在独学でプログラミングを学び中ですが、私の子供(6歳)もいずれ学ばなければならないわけです。

いずれ学ぶのであれば、今から覚えさせておけば役に立つのではないか!?
子供と一緒にプログラミングを勉強することで私の勉強にも役に立つのではないか!?

そんな考えが私の中で芽生えて、嫁さんに相談してみたところ、「やらせてみれば?」とのこと!

そして子供に「やるか!?」と聞いたところ「やってみたい!」と言ったので、子供向けのプログラミング言語「Scratch」を試してみました。この言語の存在は前から知っていて、試してみたいと思っていたのです!

どうすれば「Scratch」が始められるのか調べたところ、Webサイト内で簡単に始められました。

私は「C/C++」から入ったので、プログラミングを始めるまでにすごく準備に時間がかかる印象を持っていましたが、「Scratch」は準備なしで始められるのに驚きました。

そしてとりあえず操作方法を見て、適当に操作してみましたが、ものすごく簡単にプログラムが組める。

あらかじめ用意されているブロックを組むだけで、キャラクターが動かせたり、繰り返し処理をしたり、なんと簡単にできること・・・

「C/C++」ではここまでいくのに何日かかったことやら・・・(笑)
今でもまともにここまでプログラム組む自信はない・・・!!!orz

しかしながら、簡単にプログラムは組めるとはいえ、子供と一緒にやっていくうえで、いきなり子供に「やれ!」って言ってもできないことは明白だし、私もばりばりプログラミングができるわけでもないし、教科書が必要だと感じました。

そこで「親子で学ぶ プログラミング超入門」という本を参考にしてみました。

こちらの参考書はその名の通り、昨今のプログラミング必修化に向けて親子でプログラミングを学ぶことを推奨している本です。

サンプルのゲームプログラムを一緒に作っていく過程で「Scratch」の使い方、プログラミングの考え方を学んでいこうという、子供にとってもやさしい一冊だと感じたので、こちらにしました。

多少「Scratch」の画面構成が変更にはなっていましたが、それほど大きく違いはなく、現状進められております。

しかし、私の理想ではマウスもキーボードも使わず、MyPC「Surface」のタッチパネルだけで「Scratch」をしたかったのですが、どうにもタッチでコード部分のドラッグ&ドロップができないみたいなので、仕方なくマウスを使っております。

私の子供もタッチパネルの操作ならある程度できるのですが、マウスは使ったことがなく、また手も小さいのですごくやり辛そうでした。タッチパネルで出来るようになってくれ~~~~

今回初めて「Scratch」を体験してみて、非常にプログラミングが楽しく感じられました。まぁ私はこれでも一応「C/C++」を1年以上勉強していますのでプログラミングの基本的なことは抑えている(と思っています)のでそう感じたのかもしれませんが、子供も分からないなりにゲームがひとつひとつ完成していく様子が楽しそうでした。

「C/C++」のようにプログラムを組む際のコーディングに時間がかからない分、プログラムの動きや制御のみに注力できるので、これはこれで自分の考えを体現するツールとして、今後も活用できそうです。

今まで「C/C++」しか興味はなかったのですが、「Scratch」に触れてみて、楽しかったこともあり、その他のプログラミング言語にも非常に興味がわきました。

またいつの日か、試してみようと思います。


体重記録プログラム作成③

こんばんは。

体重記録プログラムですが、いろいろと試行錯誤しながらなんとか形になりました。

上記のコードでひとまずは体重記録、履歴表示、履歴消去をすることが出来ました。

ただ前回の記事であったように日付についてはうまくビルドに通らない為、そこは今回は諦めました。

頑張った部分としては体重履歴消去のコーディングですかね!
どうやれば良いのかを考えながら参考書を読んでいた時に<vector>が使えるのではないかと思いつき、ネットで検索してみたところ、ファイルのデータを動的配列に詰め込むコードを発見。

そちらを参考にさせてもらい、<vector>のメンバ関数である、pop_backを使い、末尾のデータを削除し、再度ファイルに書き込む方法を使いました。

他にもやりようはあるのかもしれませんが、この方法しか思いつきませんでした。

あとは入力の際に数値以外が入力された場合などのエラー処理についても実装したかったのですが、そこまでは出来ていません。

ひとまず形にはなったということで、次のプログラム作成に移りたいと思います!

しかしながら、今回のプログラム作成はプライベートでいろいろあり、約1か月くらいしていたわけですが、どこまで作成していたか、どうやって作成しようと思っていたのか、思い出すために無駄な時間を費やしてしまいました。

今後はプログラム作成の前に大まかな設計図でも作ったほうが良いと思いました。

ちなみに今回のプログラムの設計図をフローチャート的にしてみました。

ざっくりこんな感じですかね。こういった図にしてみると頭の中の考えが整理できて、しかも時間がたった後も見直せるのでいいですよね。

今私が行っている仕事でもいきなり作業ではなく、お客さんの要求仕様書に沿って作業の準備し、実作業しますしね。

自分でプログラムを作成するのにまだ参考書は手放せない状態ですが、ひとつひとつ壁を乗り越えていってる感じが楽しいです。

さて、次はどんなプログラムに挑戦してみましょう。


体重記録プログラム作成②

こんばんは。

また少し更新間隔が空いてしまいました。

twitterのほうで少しツイートしたのですが、マイホーム計画がなくなりそうになってしまい、かなり凹んでました。

が、まぁいつまでもうじうじしていても仕方ないので、今は目の前のことだけ見ていこうと思います。

ぼちぼちと体重記録プログラムの作成をしていましたが、なかなかうまくいかないもので。

ファイルに書き込む、読み込む、不必要なデータを削除する、時間を表示する、等簡単にできそうなものだと思いましたが、うまくいかず・・・

ただファイルに関しては先ほどいい案が思い浮かんだので、これからそれを試したいと思います!

問題は時間の表示の方です。

ファイルに書き込む際に日時を合わせて表示したく、調べてみたところcpprefjpにやりたいことのコードがまるまる載っていたので、そのままパクりましたw

が、しかしまるまるパクったにも関わらず、ビルドが通らない・・・

エラー内容的に#include<ctime>がうまくインクルードされていないのではと思うのですが、これを調べても検索結果がいまいちなんですよね。

VC++17の問題?それとも私の環境の問題?

そんな感じで時間についてはひとまず気にせずファイル操作で思いついた方法を実装してみます。


体重記録プログラム作成①

こんばんは。

簡単に作れるプログラムですが、自分の体重を記録してくれるプログラムを作ってみようと思います。これくらいであれば、今持っている知識でも作れるのではないかな!

以下がプログラムの構成です。

~プログラムのあらすじ~

  1. 初期画面表示
  2. 体重記録、体重履歴表示、体重履歴消去を選択させる
  3. 2.で体重記録を選択→現在の時刻を表示し、体重を入力させる
  4. 2.で体重履歴表示を選択→過去に入力した体重を一覧表示させる
  5. 2.で体重履歴消去を選択→直近の体重履歴を消去する

今回はクラスを使ってプログラムを作成してみようと思います。

以前作成していた献立決めるプログラムではクラスを使いませんでしたが、クラスに慣れるために、使ってみることにしました。

今回も「猫でもわかるC++」を参考にここまではコーディングしてみました。
まだまだ作成途中ですが、一応動きますw

ここから以下の部分の修正をしていきたいと思います。

  • 日時を表示させる
  • 体重履歴を表示させる
  • 体重履歴消去部分の作成

細かい部分の作りこみは行いません!
思うような動きをするプログラムが作成できれば良しとします!

それではまた


献立決めるプログラム作成④

こんばんは。

前回作成した処理を適用させ、一通りプログラムを完成させました!

 

#include <iostream>
#include <string>
using namespace std;

string Maindish(string&);
string Sidedish(string&);
string Salad (string&);
string Soup(string&);
string Desert(string&);

int main() {
	int buf;
	string maindish;
	string sidedish;
	string salad;
	string soup;
	string desert;

	bool maindishflug = false;	//主菜のフラグ
	bool sidedishflug = false;	//副菜のフラグ
	bool saladflug = false;	//サラダのフラグ
	bool soupflug = false;	//スープのフラグ
	bool desertflug = false;	//デザートのフラグ

	//メインメニュー画面
	cout << "メニューを選択する画面です。" << endl;
	while (1) {
		cout << "選びたいジャンルの値を押してください。" << endl;
		if (maindishflug == false) {
			cout << "1:主菜" << endl;
		}
		else if (maindishflug == true){
			cout << "1:主菜  ->  " << maindish << endl;
		}
		if (sidedishflug == false) {
			cout << "2:副菜" << endl;
		}
		else if (sidedishflug == true) {
			cout << "2:副菜  ->  " << sidedish << endl;
		}
		if (saladflug == false) {
			cout << "3:サラダ" << endl;
		}
		else if (saladflug == true) {
			cout << "3:サラダ  ->  " << salad << endl;
		}
		if (soupflug == false) {
			cout << "4:スープ" << endl;
		}
		else if (soupflug == true) {
			cout << "4:スープ ->  " << soup << endl;
		}
		if (desertflug == false) {
			cout << "5:デザート" << endl;
		}
		else if (desertflug == true) {
			cout << "5:デザート ->  " << desert << endl;
		}
		cout << "----------------" << endl;

		//入力部
		cin >> buf;
		if (buf != 1 && buf != 2 && buf != 3 && buf != 4 && buf != 5) {
			cout << "1~5で再入力してください。" << endl;
		}

		switch (buf) {
		case 1:
			Maindish(maindish);
			maindishflug = true;
		case 2:
			Sidedish(sidedish);
			sidedishflug = true;
		case 3:
			Salad(salad);
			saladflug = true;
		case 4:
			Soup(soup);
			soupflug = true;
		case 5:
			Desert(desert);
			desertflug = true;
		default:
			break;
		}
	}
}

//主菜の選択メニュー
string Maindish(string& maindish) {
	int buf;
	string maindish1 = "肉";
	string maindish2 = "魚";
	string maindish3 = "麺";
	cout << "主菜は何系が良いですか?" << endl;
	while (1) {
		cout << "選びたいメニューの値を押してください。" << endl;
		cout << "1:肉" << endl;
		cout << "2:魚" << endl;
		cout << "3:麺" << endl;
		cout << "----------------" << endl;
		cin >> buf;
		if (buf != 1 && buf != 2 && buf != 3) {
			cout << "1~3で再入力してください。" << endl;
		}

		switch (buf) {
		case 1:
			maindish = maindish1;
			return maindish;
		case 2:
			maindish = maindish2;
			return maindish;
		case 3:
			maindish = maindish3;
			return maindish;
		default:
			break;
		}
	}
}
	//副菜の選択メニュー
	string Sidedish(string& sidedish) {
		int buf;
		string sidedish1 = "ごはん";
		string sidedish2 = "煮物";
		string sidedish3 = "揚げ物";
		cout << "副菜は何系が良いですか?" << endl;
		while (1) {
			cout << "選びたいメニューの値を押してください。" << endl;
			cout << "1:ごはん" << endl;
			cout << "2:煮物" << endl;
			cout << "3:揚げ物" << endl;
			cout << "----------------" << endl;
			cin >> buf;
			if (buf != 1 && buf != 2 && buf != 3) {
				cout << "1~3で再入力してください。" << endl;
			}

			switch (buf) {
			case 1:
				sidedish = sidedish1;
				return sidedish;
			case 2:
				sidedish = sidedish2;
				return sidedish;
			case 3:
				sidedish = sidedish3;
				return sidedish;
			default:
				break;
			}
		}
	}
	//サラダの選択メニュー
	string Salad(string& salad) {
		int buf;
		string salad1 = "野菜盛り合わせ";
		string salad2 = "茹で野菜";
		string salad3 = "野菜スティック";
		cout << "サラダは何系が良いですか?" << endl;
		while (1) {
			cout << "選びたいメニューの値を押してください。" << endl;
			cout << "1:野菜盛り合わせ" << endl;
			cout << "2:茹で野菜" << endl;
			cout << "3:野菜スティック" << endl;
			cout << "----------------" << endl;
			cin >> buf;
			if (buf != 1 && buf != 2 && buf != 3) {
				cout << "1~3で再入力してください。" << endl;
			}

			switch (buf) {
			case 1:
				salad = salad1;
				return salad;
			case 2:
				salad = salad2;
				return salad;
			case 3:
				salad = salad3;
				return salad;
			default:
				break;
			}
		}
	}
	//スープの選択メニュー
	string Soup(string& soup) {
		int buf;
		string soup1 = "みそ汁";
		string soup2 = "コンソメスープ";
		string soup3 = "シチュー";
		cout << "スープは何系が良いですか?" << endl;
		while (1) {
			cout << "選びたいメニューの値を押してください。" << endl;
			cout << "1:みそ汁" << endl;
			cout << "2:コンソメスープ" << endl;
			cout << "3:シチュー" << endl;
			cout << "----------------" << endl;
			cin >> buf;
			if (buf != 1 && buf != 2 && buf != 3) {
				cout << "1~3で再入力してください。" << endl;
			}

			switch (buf) {
			case 1:
				soup = soup1;
				return soup;
			case 2:
				soup = soup2;
				return soup;
			case 3:
				soup = soup3;
				return soup;
			default:
				break;
			}
		}
	}
	//デザートの選択メニュー
	string Desert(string& desert) {
		int buf;
		string desert1 = "アイス";
		string desert2 = "フルーツ";
		string desert3 = "お菓子";
		cout << "デザートは何系が良いですか?" << endl;
		while (1) {
			cout << "選びたいメニューの値を押してください。" << endl;
			cout << "1:アイス" << endl;
			cout << "2:フルーツ" << endl;
			cout << "3:お菓子" << endl;
			cout << "----------------" << endl;
			cin >> buf;
			if (buf != 1 && buf != 2 && buf != 3) {
				cout << "1~3で再入力してください。" << endl;
			}

			switch (buf) {
			case 1:
				desert = desert1;
				return desert;
			case 2:
				desert = desert2;
				return desert;
			case 3:
				desert = desert3;
				return desert;
			default:
				break;
			}
		}
	}

しかし、長い!

そして、なんかダラダラしている!

これいろいろと突っ込みどころありますよね。
現時点で思いついたのが、

  1. クラスを作ったらプログラムが見やすくなる?
  2. 同じような関数ありすぎ。
  3. フラグは配列にすれば、変数の数を抑えられる?
  4. 献立メニューの変更をするのにプログラム書き換え面倒。

他にもありそうですが、上記部分の改善をしていきたいと思います。


スポンサーリンク
広告1
広告1