わかさぎのブログ

プログラミング、Atcoderの勉強とか

辞書の操作

リスト二つからzipを使って生成できる

a=["john","tanaka","hanako"]
b=[132,23,23]

di=dict(zip(a,b))

print(di)

 

>>>

{'john': 132, 'tanaka': 23, 'hanako': 23}

 

for文と辞書に関して

辞書のテンプレ。keyは文字列

d = {'key1': 1, 'key2': 2, 'key3': 3}

for i in d:
とするとiはkeyになる。

for i in d.key()としてもおなじ

for i in d.value()とすると値のほうが返ってくる

for i,j in d.items()とするとenumerateみたいになる。

{'john': 132, 'tanaka': 23, 'hanako': 23}
<class 'dict'>
dict_items([('john', 132), ('tanaka', 23), ('hanako', 23)])
<class 'dict_items'>

dictにitems()メソッドをかけるとdict_itemsクラスという別の何かになる。

これをlist()でリスト化できる。

 

キーだけのリストにしたいときはkey()をかけてからlist()

値だけのリストにしたいときはvalue()をかけてからlist()

で対応可能。

 

辞書版「append()」

update()メソッドで辞書を追加できる

di= di.update(di2)




Rubyのクラス変数とインスタンス変数

class Greeting
    def setName(name = "Ruby")
      @name = name   #引数をインスタンス変数@nameに設定
    end
   
    def hello
      print "Hello ", @name,"\n"  #変数@nameは他のメソッドからでも参照可能
    end
  end
   
  g1 = Greeting.new  #オブジェクトg1を生成
  g1.setName("Taro") #g1に名前を設定
  g2 = Greeting.new  #オブジェクトg2を生成
  g2.setName("Jiro") #g2に名前を設定
  g1.hello
  g2.hello
  g3=Greeting.new()
  g3.setName()
  g3.hello()

 

name="Ruby"と初めから入っているのは入力しなかったときはデフォルトの値を使うという意味。

@name=nameがself.name=nameに対応する。

self.hogeは同じクラス内の違うメソッド間でも共有される

 

@の数覚える

Rubyアソシエーション: クラスの概要

f:id:kawasakisendai2:20211020023619p:plain

 

Rubyでインスタンスメソッド生成

class MyClass2
    def method_a
        puts "method_a"

    end

    def method_b
        method_a

    end
end

my_instance = MyClass2.new()
my_instance.method_a
my_instance.method_b

 

普通のインスタンスメソッドのサンプルコード

いちいちselfと書かない。使うときだけ書くらしい。

 

インスタンス生成時はMyclass.newと書く。()はあってもなくても動くこと確認した。

Rubyのfor文

FuzzBizz

for i in 1..100
    if i % 15 == 0
        print "FizzBuzz\s"
        print "\n"
    elsif i % 5 == 0
        print "Buzz\s"
        print "\n"
    elsif i % 3 == 0
        print "Fizz\s"
        print "\n"
    else
        print i , "\s"
        print "\n"
    end
end

pythonとの比較

for i in までは同じ

pythonの場合inの後にイテラブルが来るが1..100とか書いてある。点二つであることに注意する。

ifの終わりとforの終わりにインデントそろえたendが必要であることと、ifの末尾に:が必要ないことに注意する。

MATLABクラス 銀行口座クラスの例

クラスの開発 - 一般的なワークフロー - MATLAB & Simulink - MathWorks 日本

 

methods
function BA = BankAccount(AccountNumber, InitialBalance)
BA.AccountNumber=AccountNumber
BA.AccountBalance=InitialBalance
BA.AccountListerner=AccountManager.addAccount(BA);
end
 

ファイル名と同じ名前のメソッドはコンストラクタ。

これはJAVAライクなシンタックス。コンストラクタだから

 

function self = function_name(引数 , 引数,,,)

    self.hoge = 引数

    self.hoge = 引数

というパターンになるはず。

 

properties(SetAccess = private)
AccountNumber
AccountBalance
end

 マトラボでいうプロパティはパイソンでいうインスタンス変数のこと。

アクセスできるできないのパイソンでいう__をSetAccessで設定する。

パイソンと違うのは宣言が必要なところでpropertiesでは宣言だけをする。

コンストラクタでのちに代入していく。

 

methods (Static)

パイソンと同じでインスタンスの生成が必要ないものをスタティックメソッドという。

 

BA = BankAccount(1234567,500)
BA = 

  BankAccount with properties:

      AccountNumber: 1234567
     AccountBalance: 500
    AccountListener: [1x1 event.listener]

パイソンと同じくインスタンスの生成。

 

getStatement(BA)
-------------------------
Account: 1234567
CurrentBalance: 500.00
Account Status: open
-------------------------
      function getStatement(BA)
         disp('-------------------------')
         disp(['Account: ',num2str(BA.AccountNumber)])
         ab = sprintf('%0.2f',BA.AccountBalance);
         disp(['CurrentBalance: ',ab])
         disp(['Account Status: ',BA.AccountStatus])
         disp('-------------------------')
      end
これはコマンドラインからメソッドを呼んでいる。スクリプトの中で呼ぶときはどうすればいい?
BA.getStatement()ではないのか?
これは引数selfと思えばいい