メタ情報
ブラウザから見える部分の情報
Science Opens the Future
コンストラクタを用いたクラスの設計とその利用。コンストラクタはクラスからインスタンスを発行したときに自動的に実行される初期化のメソッド(特殊なメソッドと思ってよい。)特徴はコンストラクタには戻り値がなく、コンストラクタ名がクラス名を同じになります。
public class MyConstructor{ //フィールド int x; //コンストラクターの設計。コンストラクタの特徴は戻り値がなく、コンストラクタ名がクラス名を同じ public MyConstructor(){ x = 5; } //プログラムのメインの部分。ここからプログラムが始まる。 public static void main(String[] args){ //MyConstructorクラスからインスタンス(mc)を発行する。 MyConstructor mc = new MyConstructor(); //インスタンス(mc)をフィールド(x)を用いて利用する。 System.out.println(mc.x); } }
実行結果は以下の通り。
>javac MyConstructor.java
>java MyConstructor
5
クラスの設計のみを記述したファイルと、それを利用するメインクラスのファイルの2つのファイルを用意する。
それぞれをコンパイルして、メインクラスのファイルから実行する。
//Carクラスの設計(メソッドを2つもつ) public class Car{ //燃料の状態を表示するfuelメソッド public void fuel(){ System.out.println("車の燃料は満タンです。"); } //車のナンバーの引数をとって、それを表示するnumberメソッド public void number(int num){ System.out.println("車のナンバーは" + num + "です。"); } }
//メインのクラス。このクラスから、Carクラスを記述しているファイルからCarクラスを呼び出す。 class MyMainClass{ //ここからプログラムが始まる。 public static void main(String[] args){ Car c = new Car(); //Carクラスからインスタンス(c)を作成。 c.fuel(); //インスタンスをfuelメソッドを用いて利用する。 c.number(12345); //インスタンスをnumberメソッドを用いて利用する。 } }
コンパイルと実行コマンドと結果は以下の通り。
>javac Car.java
>javac MyMainClass.java
>java MyMainClass
車の燃料は満タンです。
車のナンバーは12345です。
オブジェクト指向プログラムで、フィールドとメソッドをもつクラスを設計して、インスタンスを発行して利用した。オブジェクト指向プログラムの基本的なプログラムである。
//(1)オブジェクト指向でAccountクラスを設計して、フィールド1つ(money)とメソッド3つ(show,setId,balance)を設定した。
//(2)AccountクラスからインスタンスmyAccountを発行
//(3)インスタンスを利用する。インスタンス名.フィールド名で利用(myAccount.money)したところと、インスタンス名.メソッド名(「myAccount.show」と「myAccount.setId」と「myAccount.balance」)で利用したところがある。
public class Account{ //フィールド、預金金額を保存する変数 int money = 0; //メソッド、「銀行口座です」と表示するだけの機能 public void show(){ System.out.println("銀行口座です。"); } //メッソド、id番号を取得して「ID」を表示する機能 public void setId(int id){ System.out.println("IDを" + id + "にしました。"); } //メソッド、預金金額(money)を変更する機能 public void balance(int m){ money = m; System.out.println("預金金額を" + money + "に変更しました。"); } //メインのプログラム。 public static void main(String[] args){ //Accountクラスのインスタンスを発行。インスタンス名はmyAccount Account myAccount = new Account(); //インスタンス(myAccount)をshowメソッドで利用する。「銀行口座です」と表示する。 myAccount.show(); //インスタンス(myAccount)をsetIdメソッドで利用する。「ID」を表示する myAccount.setId(12345); //インスタンス(myAccount)をbalanceメソッドで利用する。預金金額(money)を変更する myAccount.balance(300); //インスタンス(myAccount)で、moneyフィールドを利用する。預金金額(money)を表示する System.out.println("預金金額は" + myAccount.money + "です。"); //インスタンス(myAccount)をbalanceメソッドで利用する。預金金額(money)を変更する myAccount.balance(500); //インスタンス(myAccount)で、moneyフィールドを利用する。預金金額(money)を表示する System.out.println("預金金額は" + myAccount.money + "です。"); } }
正規表現とは、Pythonのみならず、ほかの言語(Java,C,PHP,Javascript)などにも出てくる概念です。
正規表現はある特定の文字列(パターン)が、検索対象の文字列に出現するかどうかを判定します。検索パターンが検索対象の一部だけでも一致すればOKである。
[^]は文字列の先頭を表す。
[$]は文字列の行末を表す。
# -*- coding: utf-8 -*- #正規表現のreモジュールをインポートする。 import re pattern = ["ABA", "^ABA", "ABA$","^ABA$"]#見つけ出したいパターンの文字列 search = ["ABA", "ABAA", "ABAAA","AABA","AAABA"]#検索対象の文字列 #見つけ出したいパターンの文字列でループを回す。 for i in pattern: print("*******") p = re.compile(i)#正規表現を使える等にパターン文字列をコンパイルする。 for j in search:#検索対象の文字列の集合をループで回す。 result = p.search(j)#検索対象に検索パターンが一致するかチェックする。検索パターンが検索対象の一部だけでも一致すればOKである。 if result is not None: r = "OK" #一致していればOKとする。 else: r = "NG" #一致してなければNGとする。 massege = "(Pattern)" + i + "(search)" + j + "(match)" + r print(massege)
(実行結果)
*******
(Pattern)ABA(search)ABA(match)OK
(Pattern)ABA(search)ABAA(match)OK
(Pattern)ABA(search)ABAAA(match)OK
(Pattern)ABA(search)AABA(match)OK
(Pattern)ABA(search)AAABA(match)OK
*******
(Pattern)^ABA(search)ABA(match)OK
(Pattern)^ABA(search)ABAA(match)OK
(Pattern)^ABA(search)ABAAA(match)OK
(Pattern)^ABA(search)AABA(match)NG
(Pattern)^ABA(search)AAABA(match)NG
*******
(Pattern)ABA$(search)ABA(match)OK
(Pattern)ABA$(search)ABAA(match)NG
(Pattern)ABA$(search)ABAAA(match)NG
(Pattern)ABA$(search)AABA(match)OK
(Pattern)ABA$(search)AAABA(match)OK
*******
(Pattern)^ABA$(search)ABA(match)OK
(Pattern)^ABA$(search)ABAA(match)NG
(Pattern)^ABA$(search)ABAAA(match)NG
(Pattern)^ABA$(search)AABA(match)NG
(Pattern)^ABA$(search)AAABA(match)NG
正規表現とは、Pythonのみならず、ほかの言語(Java,C,PHP,Javascript)などにも出てくる概念です。
この正規表現はある特定の文字列(パターン)が、検索対象の文字列に出現するかどうかを判定します。
検索パターンが検索対象の一部だけでも一致すればOKである。
# -*- coding: utf-8 -*- #正規表現のreモジュールをインポートする。 import re pattern = ["Hello", "Tokyo", "car"]#見つけ出したいパターンの文字列 search = ["GoodNight", "Tokyo", "Tokyoto","car","mycardrive","mycar","book","building","pencil"]#検索対象の文字列 #見つけ出したいパターンの文字列でループを回す。 for i in pattern: print("*******") p = re.compile(i)#正規表現を使える等にパターン文字列をコンパイルする。 for j in search:#検索対象の文字列の集合をループで回す。 result = p.search(j)#検索対象に検索パターンが一致するかチェックする。検索パターンが検索対象の一部だけでも一致すればOKである。 if result is not None: r = "OK" #一致していればOKとする。 else: r = "NG" #一致してなければNGとする。 massege = "(Pattern)" + i + "(search)" + j + "(match)" + r print(massege)
(実行結果)
*******
(Pattern)Hello(search)GoodNight(match)NG
(Pattern)Hello(search)Tokyo(match)NG
(Pattern)Hello(search)Tokyoto(match)NG
(Pattern)Hello(search)car(match)NG
(Pattern)Hello(search)mycardrive(match)NG
(Pattern)Hello(search)mycar(match)NG
(Pattern)Hello(search)book(match)NG
(Pattern)Hello(search)building(match)NG
(Pattern)Hello(search)pencil(match)NG
*******
(Pattern)Tokyo(search)GoodNight(match)NG
(Pattern)Tokyo(search)Tokyo(match)OK
(Pattern)Tokyo(search)Tokyoto(match)OK
(Pattern)Tokyo(search)car(match)NG
(Pattern)Tokyo(search)mycardrive(match)NG
(Pattern)Tokyo(search)mycar(match)NG
(Pattern)Tokyo(search)book(match)NG
(Pattern)Tokyo(search)building(match)NG
(Pattern)Tokyo(search)pencil(match)NG
*******
(Pattern)car(search)GoodNight(match)NG
(Pattern)car(search)Tokyo(match)NG
(Pattern)car(search)Tokyoto(match)NG
(Pattern)car(search)car(match)OK
(Pattern)car(search)mycardrive(match)OK
(Pattern)car(search)mycar(match)OK
(Pattern)car(search)book(match)NG
(Pattern)car(search)building(match)NG
(Pattern)car(search)pencil(match)NG
# -*- coding: utf-8 -*- #親クラス(スーパークラス)の設計。親クラスの名前はCustomer class Customer: #コンストラクター(初期化のメソッド) def __init__(self,cname,caddress): self.name = cname #フィールド(変数) self.address = caddress #フィールド(変数) #メソッド def show(self): print(self.name, self.address) #親クラス(Customer)から子クラス(サブクラス)の設計。子クラスの名前はVip class Vip(Customer): #コンストラクター(初期化のメソッド) def __init__(self, cname, caddress, ctel): #Customer.__init__(self, cname, caddress)#親クラスのコンストラクターをそのまま引き継ぐ super().__init__(cname, caddress)#親クラスのコンストラクターをそのまま引き継ぐ self.tel = ctel #子クラスに新たに加えられたフィールド(変数) #小クラスに新たに加えられたメソッド def fullshow(self): #print(self.name, "の住所は", self.address, "で電話番号は", self.tel, "です。") print(self.name + "の住所は" + self.address + "で電話番号は" + self.tel +"です。") #子クラスVipからインスタンスを発行。インスタンス名は「x」である。 x = Vip("Ichiro", "Toyko","012-345-6789") #子クラスVipのインスタンスをメソッドを用いて利用。 x.fullshow()
実行結果
Ichiroの住所はToykoで電話番号は012-345-6789です。
文字列 文字列、配列、日時の操作
(2)最初に「お」が出現する位置は以下の通りです。
(3)5番目から8番目までの部分文字列を取り出す。
(4)配列の要素を連結する。
(5)今日の日時は以下の通りです。
//staticなメソッドとpublicなメソッドの違いを示すプログラム public class StaticMethod{ //Staticなメソッド。インスタンスを用いないでも呼び出すことができる。 static void StaticHello(){ System.out.println("Staticなメソッドです。"); } //publicなメソッド。インスタンスを使って呼び出す。 public void PublicHello(){ System.out.println("Publicなメソッドです。"); } //プログラムのメインの部分 public static void main(String[] args){ //staticなメソッドを呼び出す。 StaticHello(); //インスタンス(ob)を作成してから、publicなメソッドを呼び出す。 StaticMethod ob = new StaticMethod(); ob.PublicHello(); } }
//文字列を表示するメソッド(関数)を定義して、呼び出すプログラム。 public class HelloMethod{ //メソッド(関数)を定義 static void show(){ System.out.println("Hello"); } //プログラムのメイン部分(ここからプログラムがスタート) public static void main(String[] args){ show();//show関数(メソッド)を呼び出す } }