Python×Kivy(ライブラリ)でマルチタッチアプリ開発

2021年5月23日、Pythonの基礎の基礎はマスターかもしれないと思って、Kivyの勉強をはじめました。

「Kivyプログラミング Pythonでつくるマルチタッチアプリ」
原口和也先生(著)、久保幹雄先生(監修)
というを、本メインに使っています。

この本の章と対応づけて、補足教材みたいな立ち位置の記事を書きながらアプリ開発を目指して勉強しています。

この本に沿って公式サイトのサンプルを作って紹介しています。
例えば2章まで終わったら、Kivy公式サイトチュートリアルのこのサンプルアプリ、というように自分で実際に作ってみて、そのコードとスクリーンショット画像を下記リンクより掲載しています。

まずは公式サイトの手本通りに作ってみて、そこから少し遊びの要素を取り入れて改変しています。


今年中にアプリ1つApple Storeに公開出来たらなぁ・・・。
可能であればハロウィンまでに!!なので、もう勉強中(=^x^=)mm!にゃ
頑張りますので、応援よろしくお願いします!!

メインメニューに戻る

Homebrewが入らなくて悪戦苦闘!!


■ 2章までの内容

Kivy公式サイトチュートリアル1作ってみた(Hello World)

Kivy公式サイトチュートリアル2作ってみた(Hello World文字装飾)

Kivy公式サイトチュートリアル3作ってみた(前半)(ボタン)

Kivy公式サイトチュートリアル3作ってみた(後半)(電卓)

Kivy公式サイトチュートリアル4作ってみた(電卓表示)



■3章までの内容

Kivy公式サイトcrash course 1作ってみた!(Helloの文字移動)

Kivy公式サイトcrash course 3作ってみた!(好きな文字を移動出来る)



■4章までの内容

Kivy公式サイトcrash course4作ってみた!(好きな文字を移動のKV言語)

Kivy公式サイトcrash course5作ってみた!(色をランダムに変える)

Kivy公式サイトcrash course6作ってみた!(色ランダムで分身の術)



■ 5章までの内容

Kivy公式サイトcrash course7を作ってみた!(長方形、楕円、線)

Kivy公式サイトcrash course8を作ってみた!(文字背景の自動調整と分身の術)



Kivy公式サイトチュートリアル5を作ってみた(長方形描画)

Kivy公式サイトチュートリアル6を作ってみた(お絵かき)



Kivy Gallery Examples 「Canvas stress」を作ってみた!(カラフルな四角)


Kivy Gallery Examples 「Bezier Example」を作ってみた!(ベジェ曲線と多角形とスライダー)


Kivy Gallery Examples 「Lines Extended Demo」を作ってみた!


Gallery of Examples FBO Canvasを作ってみた!(ボタンが動くアニメーション)




メインメニューへ戻る
Python自作サンプル集

Swiftでアプリ開発される方向け
これからプログラミングを始める方へ
プログラミングと資格について

Homebrewが入らなくて悪戦苦闘の後、やっと入ってKivyやってます

Kivyというライブラリを使ってPythonでアプリを作って行く
Python自作サンプル集
Swiftでアプリ開発される方向け
これからプログラミングを始める方へ
プログラミングと資格について

Pythonでアプリを作りたい!!
それにはKivyというライブラリを使うらしい。

色々調べましたが何から手をつけて良いのかわからないので、こちらの本を中心に勉強しています。

まず、Homebrew(ホームブルー)というものを入れて、それを使ってKivyをインストールするところから始まります。
Homebrew公式

簡単にHomebrewについて書くと、macを本格的に使っていろいろインストールしたいんだけど、簡単に出来るといいなぁ・・・という時に使う、管理するものです。

アイコンがビールなので、色々なビールを入れられるジョッキ見たいなものかなぁ・・・と物凄い単純なイメージを持ちました。

「君みたいに、そんな単純な頭じゃないから、もっと詳しく知りたいよ!」という方はこちらへ。

homebrewとは何者か。仕組みについて調べてみた

【Homebrew】簡単な仕組みや基本操作を解説!使用するメリットも紹介!インストールできない時の確認項目とは?

で、Homebrewがなかなか入らなくてこれじゃぁアプリ開発できないじゃん!
いやだよ、こんなところで諦めたくないよ!!!

というわけで調べました。

まず、準備として押さえておく記事
Mac – Homebrew のダウンロードとインストール

Homebrewが入らないケースその1
【M1のMacBookを使っている】
ターミナルの設定を変えると出来るようです。
【M1】MacにHomebrwがインストールできない「zsh: command not found: brew」

【エラーメッセージが出る】
私の場合、下記のようなエラーメッセージが出たので、エラーメッセージで検索したら解決方法が見つかってインストール出来ました。

curl: (60) SSL certificate problem: self signed certificate in certificate chain
More details here: https://curl.haxx.se/docs/sslcerts.html

同じ悩みで解決された方の例
MacにHomebrewをインストールしようしたらエラーが出てできない。

ターミナルで下記のコマンドを打つことで解決出来ました。

/bin/bash -c "$(/usr/bin/curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

【その他のエラーメッセージ】
私以外のケースの方向けにリンクを貼りました。

fatal: cannot copy ‘/Applications/Xcode.app/Contents/Developer/usr/share/git-core/templates/hooks/pre-receive.sample’ to ‘/usr/local/Homebrew/.git/hooks/pre-receive.sample’: Permission denied
Failed during: git init -q

新しいMacでHomebrewをインストールできないです…

Kivyというライブラリを使ってPythonでアプリを作って行く
Python自作サンプル集
Swiftでアプリ開発される方向け
これからプログラミングを始める方へ
プログラミングと資格について

【Pythonで割り算ゲームと関数】Adoさんの半端ならK.O…「踊♪」で剰余演算子を習得

この記事を読むことで

・割り算を使った簡単なゲームの作成

・関数と剰余演算子の使い方

・IF文による割り算の結果と勝敗の分岐

・標準入力の使い方

についての概要が掴めます。

割り算ゲームの題材として、歌い手のAdoさんの「踊」の歌詞を用います。
半端(=割り切れない時)ならK.O.されちゃいます(笑)


半端、つまり、割り算をして割り切れなかったら負け、割り切れたら勝ちという割り算ゲームを格闘ゲームをイメージして作りました。
余りが0で割り切れたなら勝ち、余りが出たら負けです。

ここで被除数(割られる数)を「9」とします。
変数は「dividend」を用います。

次に除数(割る数)を「2」とします。
変数は「divisor」を用います。

余りの変数を「remainder」とします。
ここで剰余演算子「%」を使用します。

#計算結果から余りを算出
remainder=dividend % divisor


余りは1になり、勝負は「負け」です。

勝敗結果の「負け」を変数「msg」に代入します。

#dividendは被除数(割られる数)
dividend=9

#divisorは除数(割る数)
divisor=2

#計算結果から余りを算出
remainder=dividend % divisor

#割り切れるかどうかの判定
if remainder==0:
  msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
else:
  msg="YOU LOSE.....\n"

print(msg)

実行結果です。

あー、負けちゃいましたね。
では、

ここで被除数(割られる数)の変数「dividend」を「8」、
次に除数(割る数)の変数「divisor」を「4」とします。

今度は余り「remainder」が0になるので、msgには「勝利」のメッセージが代入されます。

そのコードと実行結果です。

#dividendは被除数(割られる数)
dividend=8 # ←変更

#divisorは除数(割る数)
divisor=4 # ←変更

#計算結果から余りを算出
remainder=dividend % divisor

#割り切れるかどうかの判定
if remainder==0:
  msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
else:
  msg="YOU LOSE.....\n"

print(msg)


今度は、標準入力を使って、自在に数を指定出来るように致します。

#dividendは被除数(割られる数)を入力
print("dividend被除数(割られる数)を入力して下さい>>>",end='')
dividend=int(input()) # ←標準入力に

コードと実行結果です。
標準入力で指定して、12を4で割っているので、この勝負は勝ちです!

print('♪ 半端ならK.O......\n') #まずは歌って♪

#dividendは被除数(割られる数)を入力
print("dividend被除数(割られる数)を入力して下さい>>>",end='')
dividend=int(input()) # ←標準入力に

#divisorは除数(割る数)
print("divisor除数(割る数)を入力して下さい>>>",end='')
divisor=int(input()) # ←標準入力に

#計算結果から余りを算出
remainder=dividend % divisor

#割り切れるかどうかの判定
if remainder==0:
  msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
else:
  msg="YOU LOSE.....\n"

print(msg)

細かい修正ですが、割られる数、割る数、余りを表示させます。
その実行結果です。

print('♪ 半端ならK.O......\n') #まずは歌って♪

#dividendは被除数(割られる数)を入力
print("dividend被除数(割られる数)を入力して下さい>>>",end='')
dividend=int(input()) # ←標準入力に

#divisorは除数(割る数)
print("divisor除数(割る数)を入力して下さい>>>",end='')
divisor=int(input()) # ←標準入力に

#計算結果から余りを算出
remainder=dividend % divisor

print("被除数(割られる数)="+str(dividend))
print("割る数="+str(divisor)+"\n")
print("余り【"+str(remainder)+"】\n")


#割り切れるかどうかの判定
if remainder==0:
  msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
else:
  msg="YOU LOSE.....\n"

print(" 果たして勝負の結果は・・・・\n"+msg)

割り切れませんので、余り、半端なのでK.O.されて負けました。


次に、ここまで書いたコードを関数を使ってみます。
標準入力で割られる数、割る数を入力して、それらを引数として関数「dance_div」を呼び出します。

呼び出された「dance_div」の中で仮引数として、割られる数「x」と割る数「y」が入ります。
計算をして数を表示します。
余りによる分岐をして、勝敗結果の変数msgを戻り値として呼び出し元に戻します。

呼び出し元では変数「judgment」に代入します。

関数の部分です。

#割り算してあまりを返す関数
def dance_div(x,y):
  #計算結果から余りを算出
  remainder=x % y

  print(" 被除数(割られる数)="+str(x))
  print(" 割る数="+str(y)+"\n")
  print(" 余り【"+str(remainder)+"】\n")

  #割り切れるかどうかの判定
  if remainder==0:
    msg=" YOU WIN!!!!!!!!!!!!!!!!!!!\n"
  else:
    msg=" YOU LOSE.....\n"
  
  #関数の呼び出し元に代入する
  return msg    

コードと実行結果です。

print('♪ 半端ならK.O......\n') #まずは歌って♪

#割り算してあまりを返す関数
def dance_div(x,y):
  #計算結果から余りを算出
  remainder=x % y

  print("被除数(割られる数)="+str(x))
  print("割る数="+str(y)+"\n")
  print("余り【"+str(remainder)+"】\n")

  #割り切れるかどうかの判定
  if remainder==0:
    msg="YOU WIN!!!!!!!!!!!!!!!!!!!\n"
  else:
    msg="YOU LOSE.....\n"
  
  #関数の呼び出し元に代入する
  return msg    


#dividendは被除数(割られる数)を入力
print("dividend被除数(割られる数)を入力して下さい>>>",end='')
dividend=int(input()) 

#divisorは除数(割る数)
print("divisor除数(割る数)を入力して下さい>>>",end='')
divisor=int(input())

#関数を呼び出して勝敗結果を「judgment」に代入
judgment=dance_div(dividend, divisor)


print("果たして勝負の結果は・・・・\n"+judgment)


お疲れ様でした。ブレイクタイムPhotoは、

コスモスの花です。
しながわ花海道で撮影しました。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

Pythonの進捗状況(私のロードマップ)

この記事ではPythonに絞って、ゲーム感覚でプログラミングを楽しめて、尚且つ、出来るだけコストを書けず挫折しにくい学習方法を紹介しています。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

paizaラーニング さんという学習コンテンツで、1レッスンに8個程度のチャプターがあります。入門講座の他に完全無料の「体験版」があるので、自分との相性の合う言語を手軽に探せます。

2021年2月21日からPythonの学習を本格的に始めました。
それまでは幾つかの言語を自分探し的にやっていました。
2021年5月5日(GW最終日)に体験版及び入門講座を終えました。

体験版と入門講座のLesson6までをまず行いました。
ここまでで変数、条件分岐、ループ、リスト(他の言語でいう配列)が学べます。

その後、Lesson7の関数に進む前にレベルアップメニューの問題集のリンクがあるので、そちらで条件分岐、配列、配列活用メニュー、二重ループメニューを終わらせ、最後にCランクレベルアップメニューをクリアしました。

レベルアップ問題集は、順番に解いていくと最後の問題が解けるようにテーマごとに構成されていて、まずは自力で解いて、それから正解した場合でも必ず模範解答を確認して、もっと良いやり方があったらそのやり方でも問題を解いてみました。

Cランクアップメニューをクリアした後、Lesson7の関数に進み、最後の動画レッスン(2021年5月5日現在)のLesson10までで関数に加えてクラス、例外処理を学びました。

動画レッスンには内包表記はありませんが、レベルアップ問題集の模範解答などを見て、内包表記が少し分かる程度の知識があれば、この本、「独習Python」を読めると思います。

paizaにはスキルチェックというものがあり、ランクがDランク、Cランク、Bランク、Aランク、1番上がSランクになります。

私は2021年12月現在Cランクですが、Cランクの問題は解ける問題もありばそうでない問題もあり、安定して解けるのはDランクの問題なので、実質的な実力はDランクだと思っています。

そこで、実質的にCランクの問題を安定して解ける力をつけ、さらに上を目指すのに、「レベルアップ問題集」のPythonのコードと仕事で必要になるGASのコード(スプレッドシートを使用)をブログで公開しています。

関連記事:paizaレベルアップ問題集をPythonとGASの両方で解いてみた集
これは、DランクからCランクにレベルアップするための、Cランク獲得ストーリーを参考にしています。



■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

出来れば基本情報技術者試験合格レベルの知識もあった方がより分かりやすいかも知れませんが、ITパスポートのみという方でも、論理演算とか知っていれば学習可能かも知れません。

2021年5月23日からKivyを初め、今現在はPython×kivyで2021年内にアプリを開発出来るよう、仕事と並行して勉強しています。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Swiftについて

この記事ではSwift学習時に使用していた本3冊の中から最も初心者向けかつ内容が充実している本を1冊紹介します。

これからプログラミングを始める方へ
プログラミング学習で関わってはいけない人と避けるべき環境
風呂グラミング(入浴剤紹介)
(保護者の方へ)こどもプログラミング

iPhoneでアプリの開発というと、まず思い浮かぶのがSwiftだと思います。
基本情報技術者試験の受験が終わった2021年1月前半からSwiftをやっていました。

ドットインストールさんでSwiftの3分動画講義があり、演算やループ、配列、タプルといった基本が学べます。
また、この記事後半で紹介する本では基礎を中心により深く学べます。

SwiftはMacのX-Codeで動くので、Windowsでは使用できないんです。
では、macに買い換えるまで、Windowsでどうやって勉強をしていたのかと言うと、
paizaのエディタを使って、そこにコードを書いていました。

関連記事:Mac買い換え備忘録

Swiftは本も日本語の情報も沢山あり、アプリ開発で何か特別な理由が無い限りは一番お勧めな言語です。

Swiftで開発を考えていた頃に3冊ほど本を買いましたがその中で最も内容が充実していて、プログラミング全くの初めてでも小学生程度の算数が出来れば読み進められる本を1冊紹介します。

先ほど、何か特別な理由が無い限りSwiftがお勧めと書きましたが、私は例外的な例に当てはまってしまったので、別の方法でアプリ開発を目指すことにしました。

関連記事:Python×kivy

これからプログラミングを始める方へ
プログラミング学習で関わってはいけない人と避けるべき環境
風呂グラミング(入浴剤紹介)
(保護者の方へ)こどもプログラミング

【Pythonクラス爆速理解!!】「月曜日はウンジャラゲ♪」で、「昭和のギャグ」からクラスが学べちゃうんですョ!!

この記事を読むことで、

・昭和ギャグを通してPythonのクラスの初歩的なコードが書けるようになる

・ロスジェネ世代や中高年のプログラミング学習に馴染みのある例を用いている


・改行の仕方の復習

・内包表記を使ったループの復習

プログラミング初心者で、子どもの頃にTV で「志村けん」さんのギャグを見て笑っていた昭和の方々を対象にしていますが、若い方でも志村けんさんをご存知の方は大勢いらっしゃると思いますので、年齢に関係なくクラスの学習が必要な方はお立ち寄り下さいませ♪

クラス=設計図

インスタンス=クラスという設計図から作られた「具体的な」製品

と説明をすると、なんだか小難しい感じがするので、

クラス… 志村けんさんの「ウンジャラゲ」を例にして、【何】曜日は【ナニナニナニ♪】といったフォーマット

インスタンス… そのフォーマットから作った、

「【月】曜日は【ウンジャラゲ】」、
「【火】曜日は【ハンジャラゲ】」・・・「【日】曜日は【ランラランらランランっ!と言った「具体的な」各曜日ごとの踊り

と捉えると少し分かりやすくなるかもしれないです。

下記の動画は、今回学ぶ「Pythonのクラスの例」として使っているので、お忙しい方も出来れば「最初の1分程度まで(日曜日まで)」を先に見ておいて頂けると、楽しみながらPythonのクラスの理解が深まると思います。
動画右下の歯車マークから再生スピードを2倍速にすると、余計に笑えるかも知れませんヨ!)


では、いよいよプログラムを詳しく見ていきます。
ウォーミングアップとして、最初に志村けんさんのセリフとBGMを出力するコードです。

シンプルなprint文3行です。

#志村けんさんのコールと「ウンジャラゲのBGM」
print('-------------------------------------------')
print('志村けんさん:「さぁ、みんな揃って【ぶわぁぁぁぁぁぁぁっと】参りましょうか!!」')
print('♪・・・BGM・・・\n')

ポイントと言っても、4行目のprint文で改行の「バックスラッシュn」を使っている所ぐらいでしょうか。「バックスラッシュ」はMacをお使いの方は【option】+【¥】で表示されます。Windowsの方はこちらをご参照ください。


では、ここからが本題で、クラスJarageを作って行きます。
まずは、インスタンス化する時に自動的に最初に呼ばれるコンストラクタの部分のコードから書いてきます。

コンストラクタは簡単に書くと、初期化するメソッド(関数)です。
初期化 → 月曜日 → 初期化 → 火曜日 → 初期化 → 水曜日・・・
という具合に呼び出されるので、必ず初期化が必要です。

#クラスJarage
class Jarage:

#コンストラクタで初期化している
  def __init__(self, week, spell):
    self.week = week
    self.spell = spell

selfというのは、呼ばれた月曜日、火曜日・・・の各曜日自体のことです。
weekに曜日を、spellに「ウンジャラゲ」、「ハンジャラゲ」といった歌詞を引数にしています。
クラスで使うメソッド(関数)には「self」が必要です!!

次は、「何曜日」が「ナンジャラゲ」になるのか出力するSongメソッドです。
クラスの中で使う関数をメソッドと呼びます。

#何曜日は何ジャラゲかを出力するSongメソッド
    def Song(self):
      print(self.week+'曜日は、「'+self.spell+'」')

一旦ここまでのクラスJarageのコードをまとめます。

#クラスJarage
class Jarage:

  #コンストラクタで初期化している
  def __init__(self, week, spell):
    self.week = week
    self.spell = spell

  #何曜日は何ジャラゲかを出力するSongメソッド
   def Song(self):
     print(self.week+'曜日は「'+self.spell+'」')

クラスの中にあるSongメソッドを使うのに、

mon=Jarage('月','ウンジャラゲ')

とすると、【月】曜日は【ウンジャラゲ】、と入るようにします。
変数【self.week】に「月(曜日)」、変数【self.spell】に「ウンジャラゲ(歌詞)」が入り、これをリストを使って、各曜日用意します。

次に、月曜日から日曜日までインスタンス化する処理です。この後、各曜日を格納するリストeverydayを、各曜日の英語略で作ります。

#曜日とその歌詞のインスタンスを生成
mon=Jarage('月','ウンジャラゲ♪')
tue=Jarage('火','ハンジャラゲ♪')
wed=Jarage('水','スイスイスイ♪')
thu=Jarage('木','モーリモリ♪')
fri=Jarage('金','キンキラキン♪')
sta=Jarage('土','ギンギラギンのギンギラギンのギンギラギンのギン♪')
sun=Jarage('日','ランラランらランランっ!')

リストはこちらです。

#曜日のリスト
everyday=[mon,tue,wed,thu,fri,sta,sun]

このリストeverydayをループを使って順々にインスタンス化していくコードです。

#ループを使って各曜日のインスタンス化を行う
for day in everyday:
    day.Song()

このループの部分を内包表記で書くと、ループのコードが1行にシンプルに記述出来ました。

#内包表記で各曜日のインスタンス化のループを作成
[day.Song() for day in everyday] 

内包表記の公式
[結果 for いつものFor文 ]


では、クラスJarageの中のSongメソッドをループで呼び出して各曜日ごとに表示します。

これまでのコードに出力文「だいじょぶだぁ」などを加えたコードと、実行結果です。

#志村けんさんのコールと「ウンジャラゲのBGM」
print('\n -------------------------------------------')
print(' 志村けんさん:「さぁ、みんな揃って【ぶわぁぁぁぁぁぁぁっと】参りましょうか!!」')
print(' ♪・・・BGM・・・\n')

#クラスJarage
class Jarage:

  #コンストラクタで初期化している
    def __init__(self, week, spell):
      self.week = week
      self.spell = spell

  #何曜日は何ジャラゲかを出力するSongメソッド
    def Song(self):
      print(' '+self.week+'曜日は「'+self.spell+'」')


#曜日とその歌詞のインスタンスを生成
mon=Jarage('月','ウンジャラゲ♪')
tue=Jarage('火','ハンジャラゲ♪')
wed=Jarage('水','スイスイスイ♪')
thu=Jarage('木','モーリモリ♪')
fri=Jarage('金','キンキラキン♪')
sta=Jarage('土','ギンギラギンのギンギラギンのギンギラギンのギン♪')
sun=Jarage('日','ランラランらランランっ!')

#曜日のリスト
everyday=[mon,tue,wed,thu,fri,sta,sun]


#内包表記で各曜日のインスタンス化のループを作成
[day.Song() for day in everyday] 

print('\n 志村けんさん:「だいじょぶだぁ!!」') 
print(' -------------------------------------------\n') 


最後に練習として、「【猫】曜日は【うんにゃにゃんにゃんにゃん(=^x^=)っm】」を加えます。

これはリストeverydayに「cat」を追加して、「猫(【猫】曜日の猫)」、「【うんにゃにゃんにゃんにゃん(=^x^=)っm】」と引数を2つ指定したオブジェクトを作れば良いだけなので、簡単に改造できそうですね。

追加したコードです。

#猫曜日を追加
cat=Jarage('猫','んにゃにゃにゃにゃんにゃん(=^x^=)mm!')

#曜日リストの末尾に「cat」を追加
everyday=[mon,tue,wed,thu,fri,sta,sun,cat]

追加の実行結果です。

はい、これで無事に「猫曜日」が追加されました!!

・・・いったい自分は何をしているんだろう…。という気にもなりましたが、昭和のギャグも令和でのプログラミングの勉強に繋がっていたってことで。

それではこの追加のコードを含めて、ここまでの全コードを掲載します。

#志村けんさんのコールと「ウンジャラゲのBGM」
print('\n -------------------------------------------')
print(' 志村けんさん:「さぁ、みんな揃って【ぶわぁぁぁぁぁぁぁっと】参りましょうか!!」')
print(' ♪・・・BGM・・・\n')

#クラスJarage
class Jarage:

  #コンストラクタで初期化している
    def __init__(self, week, spell):
      self.week = week
      self.spell = spell

  #何曜日は何ジャラゲかを出力するSongメソッド
    def Song(self):
      print(' '+self.week+'曜日は「'+self.spell+'」')


#曜日とその歌詞のインスタンスを生成
mon=Jarage('月','ウンジャラゲ♪')
tue=Jarage('火','ハンジャラゲ♪')
wed=Jarage('水','スイスイスイ♪')
thu=Jarage('木','モーリモリ♪')
fri=Jarage('金','キンキラキン♪')
sta=Jarage('土','ギンギラギンのギンギラギンのギンギラギンのギン♪')
sun=Jarage('日','ランラランらランランっ!')

#猫曜日を追加
cat=Jarage('猫','んにゃにゃにゃにゃんにゃん(=^x^=)mm!')

#曜日リストの末尾に「cat」を追加
everyday=[mon,tue,wed,thu,fri,sta,sun,cat]


#内包表記で各曜日のインスタンス化のループを作る
[day.Song() for day in everyday] 

print('\n 志村けんさん:「だいじょぶだぁ!!」') 
print(' -------------------------------------------\n') 

今回教材に使った曲は、「植木等 ハナ肇とクレイジー・キャッツの曲」だそうです。


お疲れ様でした。ブレイクタイムPhotoは、

しながわ花海道のコスモスです。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

Python クラスを使ってアロマオイルの値段を計算する

この記事を読むことで、

・クラスを使った計算の例に、ハッカ油とレモン精油のアロマオイルの値段の計算

・コンストラクタの書き方

・消費税の計算でint関数で小数を切り捨て値段の整数を求める

・インスタンス化

についての概要が掴めます。

具体例として、クラスを使って、アロマオイルの単価×数量×税率から合計金額を計算します。

クラスは「設計図」というイメージで説明されることが多いです。

クラス=設計図

インスタンス=クラスという設計図から作られた「具体的な」製品

と説明をすると、なんだか小難しい感じがするので、

クラス… 【アロマオイルの種類】、【アロマオイルの数量】

インスタンス… そのフォーマットから作った、


【ハッカ油】の【数量】、
【レモンオイル】の【数量】

と言った「具体的な」アロマオイルについて

と捉えると少し分かりやすくなるかもしれないです。

「Aroma」というクラス(設計図)に「money」というメソッド(クラス内で使う関数)を持たせて、アロマという抽象的なものから、「ハッカ油」、「レモン精油」という具体的なもの(インスタンス)を作って計算結果を求めています。

おすすめのハッカ油とレモン精油を購入するイメージでコードを書きました。

ハッカは1本1100円、レモンは1200円で計算しました。
購入数はハッカ油5本、レモン精油4本とします。
消費税は10%で計算します。


では、ここからコードを書いていきます。
まず、クラスは下記のコードで作成します。

class Aroma:

「Aroma」というクラスを作りました。注意点として、クラスの先頭は大文字にします!

クラス内で、消費税率taxを宣言して10%にしました。
税抜価格に1.1をかける計算になります。

tax=1.1

このクラスの中には、先ほど紹介した「money」というアロマの値段を計算するメソッドがあるのですが、「Aroma」というクラス(設計図)を初期化して、「ハッカ油」の値段を計算 → 「ハッカ油」の値段と数量が入っている変数を初期化→「レモン精油」の値段を計算しています。

初期化する為に、「コンストラクタ」という特別なメソッドを使います。
このメソッドがあるので、「ハッカ」→ <初期化> → 「レモン精油」と計算出来ます。

そのため、メソッド「money」の前にコンストラクタを書いています。
コンストラクタはクラスの中で1番先に呼び出されます。

#これは「コンストラクタ」で最初に呼ばれて変数を初期化している
    def __init__(self,price,count):
        self.price=price
        self.count=count

コンストラクタは、「init」を使って書いています。
コンストラクタの書き方をまとめると、上記コードの2行目は、この様な書き方になります。

def (スペース)__(アンダーバー2つ)init__(アンダーバー2つ)

このコンストラクタの中には「self」というものが入っていますが、ここでは簡単に、「ハッカ油自体」、「レモン精油自体」だと思って下さい。

コンストラクタの後に、値段を計算するメソッドmoneyを書きます。
int関数で、小数点以下を切り捨てて整数の値段にしています。

#値段を計算するメソッド
    def money(self):
        return int(self.price*self.count*Aroma.tax)

ハッカ油やレモン精油をクラスを使って計算するのに、クラスという設計図を使って、「ハッカ油」、「レモン精油」の単価と数量を指定して計算します。

そのインスタンス化と出力のコードです。

#インスタンス化
hakka=Aroma(1100,5)
remon=Aroma(1200,4)

#値段を出力。「str」と「+」を使って計算結果と文字列を出力している。
print('【 ハッカ油】は合計【'+str(hakka.money())+'】円です。')
print('【レモン精油】は合計【'+str(remon.money())+'】円です。')

ここまでのコードのまとめと、出力結果です。

class Aroma:

    #消費税
    tax=1.1

    #これは「コンストラクタ」で最初に呼ばれて変数を初期化している
    def __init__(self,price,count):
        self.price=price
        self.count=count

    #値段を計算するメソッド
    def money(self):
        return int(self.price*self.count*Aroma.tax)

#インスタンス化
hakka=Aroma(1100,5)
remon=Aroma(1200,4)

#出力
print('【ハッカ油  】は合計【'+str(hakka.money())+'】円です。')
print('【レモン精油】は合計【'+str(remon.money())+'】円です。')

オススメのアロマです。

ハッカ油
レモン精油

お疲れ様でした。ブレイクタイムPhotoは、

富士山と江ノ島です。

ご精読ありがとうございました。

■ 独習Python ■
Kindle版
単行本(ソフトカバー)

Python自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介