• ホーム     戻る

  • 女の心触れあうていて藤垂るる

    牡丹昏れ夕べのひかり空に満つ

    葉桜の夕べかならず風さわぐ

    窓の雪女体にて湯をあふれしむ

    ふところに乳房ある憂さ梅雨ながき

    (桂 信子)   
     改訂中:20140302
  •  



    第4章      変数と代入


  •  Variables,変数 expressionsstatements文


  • (1)変数の定義
  • 代入statement
     
    名前objectRference=値value

  • 変数
    :valuable ある値につけられた
  •     名前。オブジェクトにつける名札,objectRference。

    valueが保存されている場所を保持している、
    >>> a = 3 >>> a
    3 名前は a はvariable変数と呼ばれる。中身は変更できる。 valuableは value (3)を表示する。. >>> s="葉桜の夕べ必ず風騒ぐ"
    >>> s
    '葉桜の夕べ必ず風騒ぐ'
     変数に名前を付ける時は次のルール がある。
    1) 1文字目は英文字かアンダーバー(_):日本語も可。

  • 2) 2文字目以降は英数文字、アンダーバー:日本語も可。
    3) 予約語は使用できない。
    4) 大文字と小文字は区別される

    5)名前の長さに制限はない。
    6)変数名は利用の前に決めておかないとエラーになる。初期化しておく。
    (http://www.pasteur.fr/formation/infobio/python/)  
       ある値を変数に代入する。assign
       変数にはオブジェクトが置かれてい
       る場所情報が格納されている。
       変数はオブジェクトのコピーでなく、リファ
       レンスを保持する。
       Pythonでは変数の型はデータ入力時点で決まる。
       ほかのデータを代入すると元のデータは失われ、メモリ内から
       消去される。
     '   
              

  •          
     
    変数に名前を付けるときには、それが一目でなにを指している
               かわかるようにする。短くて内容を解りやすく示す。
         


      


     変数名はpython3.0から日本語も使えるので、会計や税法分野では便利。 

    変数にpythonのkeywordは
  • 使用できない。
     
  • 変数への代入

    書式
    変数名 = オブジェクト
    変数がオブジェクトを参照できるようにすることを、Pythonでは代入ステートメントと呼んでいる代入ステートメントは「=」記号の右辺のオブジェクトへの参照を左辺の変数に格納。変数にオブジェクトを代入するという。 
    num = 10
    name = "加藤"
    変数の作成と使用

    変数は、変数に何らかのオブジェクトを代入した時点で作成が行われる。作成された変数は、あたかも変数が参照しているオブジェクトのように式の中で使うことが出来る。 

    print」関数
    の引数に文字列の代わりに変数を指定。式の中で変数を使用すると、変数が参照しているオブジェクトに置き換えられて使用される。「Hello」が出力される。 
    変数を利用すれば数値の演算結果や文字列を連結して作成された新しい文字列などへの参照を持しておき、後から利用することが可能になる。
    オブジェクトが代入されていない変数を式の中で使用すると「NameError」が発生。

    変数名の付け方


    Pythonで定義されている予約語は変数名には使えない。
    予約語
    and       del       for       is        raise
    assert    elif      from      lambda    return
    break     else      global    not       try
    class     except    if        or        while
    continue  exec      import    pass      yield
    def       finally   in        print

    慣習的なものや実際に不都合がある変数名の例
    先頭にアンダーバーが付いた変数名(_var)
    先頭にアンダーバーが2つ続いた変数名(__var)
    大文字で始まる変数名(Var)
     

    変数はあくまでオブジェクトがどこにあるのかの目印なので、変数自体には型はない。あくまで変数が参照しているオブジェクト自身がどういった型のオブジェクトなのかということ。
    変数は一度作成され、別のオブジェクトを代入する事ができる。新しいオブジェクトを代入するということは、新しいオブジェクトの参照が変数に保持されるということ
    var = 35
    var = 50
    上記では変数「var」に数値「35」を代入すると同時に変数「var」を作成。変数「var」に別の数値の「50」を代入すると。変数が参照できるオブジェクトは1つだけなので、新しいオブジェクト50を参照するようになれば、元のオブジェクトへの参照は出来ない。
    新しいオブジェクトの型は異なることがでる。変数には型はなく、変数にはオブジェクトへの目印が格納されているだけ。
    var = 25
    var = "Hello"
    式の中での変数の扱い
    変数が作成されると、変数をあたかもオブジェクトのように式の中で使用することが出来る。
    num = 10
    sum = num + 7
    変数はプログラムの実行時に、オブジェクトに対するのと同じように変数に対しても演算が行える。 
     
     *def()は自作関数を作成するときに使用。
    >>> def msg():
            msg = "今日は、"
            newmsg = msg + "良いお天気ですね!"
            print (newmsg)
  •        
    >>> msg()
    今日は、良いお天気ですね!

  • 累算代入文

    変数に対する演算では、変数に対して行った演算結果を改めて同じ変数に対して代入するということが行われる。変数に格納されている数値を1だけ増加させる。
    >>> num=200
    >>> damy=num+1
    >>> damy
    201
    >>> num=damy
    >>> num
    201
    数値オブジェクトは一度作成されると変更が出来ないので、変数に対して数値の「1」を加算した新しい数値オブジェクトを作成し、そのオブジェクトを改めて変数に代入。 
    変数「num」に代入されているオブジェクトに対して1を加算した結果である「11」と言う数値オブジェクトを改めて変数「num」に代入。「=」は等しいと言う意味ではなく、あくまで右辺を左辺に代入するという意味で使用される。
    累算代入文の使い方
    何らかの演算を行った結果を変数に改めて代入することは頻繁に行われる。その為、特別な記述方法が用意されている。

    num = 200
    num = num + 1
    これは次のように記述する場合がある
  • num = 200
    num += 1
    累算代入、拡張代入と呼ぶ。
    記述方法
    +=  -=  *=  /=  //=  %=  **=  >>=  <<=  &=  ^=  |=
    使い方と意味
    変数 += 式        # 変数 = 変数 + 式
    変数 -= 式        # 変数 = 変数 - 式
    変数 *= 式        # 変数 = 変数 * 式
    変数 /= 式        # 変数 = 変数 / 式
    変数 //= 式       # 変数 = 変数 // 式
    変数 %= 式        # 変数 = 変数 % 式
    変数 **= 式       # 変数 = 変数 ** 式
    変数 >>= 式       # 変数 = 変数 >> 式
    変数 <<= 式       # 変数 = 変数 << 式
    変数 &= 式        # 変数 = 変数 & 式
    変数 ^= 式        # 変数 = 変数 ^ 式
    変数 |= 式        # 変数 = 変数 | 式
     

    (2)変数のイメージ


  • 状態を表すパターン
  •  
  • 会議室が使用中か、ある人が男か女か、卒業できるかどうか等

  • def grad():
        phis=int(input("tennsu>>"))
        if phis>=60:
            print("ok")
        else :
            print("no")
    >>> grad()
    tennsu>>67
    ok
  • 分類のパターン
  •  
  • def category():
        code="010200"
                     コード番号をきめる
      
    category=code[0:2]
          コード番号文字列から最初の2要素を分類標識として抽出する
  •   print(category)
  • >>> category()
    01
  • [ ] はリスト構造を示す。0:2は最初から2項目
    改良版
  • def category():
        code="010200"
        category=code[0:2]
        print("コード ",code)
        print("カテゴリー ",
    category)
    >>> category()
    コード  010200
    カテゴリー  01
  •  
  • (3)代入の定義
  •   
    代入演算子   

    代入:asaignment: 代入演算子   を使う。

    変数を作成するのは代入式

  • 代入ステートメント左側は代入先、右側に代入対象オブジェクト
    代入するとオブジェクトへのリファレンス(参照)がつくられる。
  •  
  • 初期化 initialization
  •     a=12, b=6のようにすること。
       
       
       
  • オブジェクト プログラムで利用するデータ
  • 自己代入

  • >>> x=1
    >>> x+=3
    >>> x
    4

  • >>> x=56
    >>> y = 12
    >>> x += y
    >>> x
    68
    >>> x -= y
    >>> x
    56
    >>> x *= y
    >>> x
    672
    >>> x /= y
    >>> x
    56.0
    >>> x %= y
    >>> x **= y
    >>> x
    68719476736.0

    多重代入

  • 左右が複数値
  • >>> x,y,z =1,2,3
    >>> x,y,z
    (1, 2, 3)

    >>> x
    1
    >>> y
    2
    >>> z
    3
  • >>> x = 4,5,6
    >>> x
    (4, 5, 6)

    鶴亀算

  • 漢字を変数名に使って。

    求めるもの: 鶴と亀のそれぞれの数を求める。
     データ :変数 鶴亀計 足の数計
     
     方法 :算術演算子print関数 
     条件: 

    鶴と亀の数の合計は16、鶴と亀の脚の数は44とする。亀は何匹鶴は何羽です
    か。

    鶴亀計,足の数計,亀の数,鶴の数は変数名です。

    亀の脚を2本と仮定して計算する。
  •  
  •  
  •  
  • 鶴亀計  =  16

    足の数計  =  44
  • 亀の数  =  (足の数計  -  鶴亀計  *  2 )  /  2

    鶴の数  =  鶴亀計  -  亀の数

    print
    ('亀の数', 亀の数)

    print
    ('鶴の数', 鶴の数)

    亀の数 6

    鶴の数 10
  •  
  • 変数を使う

  •  求めるもの: 文字列を出力
     データ :入力 変数 stringOk
     name musician age height     
               weight

     方法 :print関数 
     条件: 



    変数に文字列を代入する

  •    
    >>> name  =  'パイポパイポ、シューリンガン、グーリンダイ、ポンポコピー
    、ポンポコナ'

    >>> print ('私の名前は ', name,  'よ’)

    私の名前は  パイポパイポ、シューリンガン、グーリンダイ、ポンポコピー
    、ポンポコナ'
      よ

    >>> print 'えっ!',  name

    えっ! パイポパイポ、シューリンガン、グーリンダイ、ポンポコピー
    、ポンポコナ'

     
  •  変数に別のオブジェクトを再代入し、指し示す先を変更する。  
  • >>> musician  =  '千住真理子'                    

    >>> print (musician +  ' の演奏は素晴らしかった。')

  • 千住真理子の演奏はすばらしかった。

    >>> musician  =  'ロンドンフィルハーモニック管弦楽団'

    >>> print
    (
    musician  +  ' の演奏は素晴らしかった。')

    ロンドンフィルハーモニック管弦楽団 の演奏は素晴らしかった

     
    name = "mitiya tobari"
    age = 78
    height = 160
    weight = 72
    print ("name?",name)
    print ("age",age,"years old")
    print ("height",height,"cm")
    print ("weight",weight,"kg")
  •  
  • name,age,height,weightは変数
  • mitya tobari,78,160,72はリテラル
  •  name? mitiya tobari
    age 78 years old
    height 160 cm
    weight 72 kg
  •  
  •  変数を使った順次実行

  •  求めるもの: 変数を使った順次実行の出力
     データ :入力 変数 q  v w xvar var1 var2 

     方法 :print関数算 術演算子 
     条件:書式 %d %s % 



    >>> 
    q   =  7                  
     print (q)                
  •  7
    >>>  q  =  "sevn"  
               
     
    q に文字列sevnを代入すると、新たにsevnという文字型のオ 
     
      ブジェクト
    が生成され、変数 q にアドレスが保持

    >>>  print (q)
    sevn

    変数を使って計算する
  •  
  • >>> v  =  7                       


  • >>> w  =  18

    >>> x  =  v  +  w                        

    >>> print
    ( x)

    25

    >>> print  ("%d  + %d  =  %d"  % (v ,  w,  x))  
  • #   書式指定子を使う。

    7  + 18  =  25
                    
                 
    >>> var =  5  *  (1  +  2 )

    >>>var        

    15

    >>> print( '')       
      
  •     # 空白が出力。    
  •  
  •   例題  生産日報  生産品は 
      

      方法 :print int input関数算術演算子 
      

 日付=input('日付>')

  print
(日付)

  箱=12           
  

             箱は12個入り

  カートン=24                  

             カートンは24箱入り

  箱単価=1500

             箱単価

   バラ単価=95

             1個単価

 せんべい生産=input('本日生産高>')  
inputの値はstrngにな  
                      るのでintに変換

 せんべい生産=int(せんべい生産)

                      せんべいの生産数

 箱生産=int(せんべい生産/箱)

                    箱単位生産数・

 バラ=せんべい生産 % 箱   


                   バラは箱単位構成外の製品数

 カートン生産=int(箱生産/カートン)

                   カートンの生産数。

 箱バラ=箱生産 % カートン      


                  箱バラはカートン構成外の箱単位
                  製品数


 print
('本日のせんべい生産高=',せんべい生産)

 print
('箱単位製品数=',箱生産)

 print
('単位外製品個数=',バラ)

 print
('カートン単位製品数',カートン生産)

 print('
箱バラ単位製品数',箱バラ)

 カートン価格=カートン生産*カートン価格

 バラ価格=バラ生産*バラ価格

 箱バラ価格=箱バラ生産*箱価格

 合計生産価格=カートン価格+バラ価格+箱バラ価格

 print
('カートン販売価格=',カートン価格)

 print
('バラ販売価格=',バラ価格)

 print
('箱バラ販売価格=',箱バラ価格)

 print(
'合計生産価格=',合計生産価格)


 本日の生産販売日報
 日付>2009/05/18
 2009/05/18
 本日生産高>3318
 本日のcookes生産高= 3318
 ボックス単位製品数= 276
 単位外製品個数= 6
 カートン単位製品数 11
 ボックス単位製品数 12
 カートン製品販売高= 300960
 単品販売高= 570
 ボックス製品販売高= 13680
 販売高合計= 315210
>>>

  • まとめ
  • >>> print( '変数について何か注意がありますか')

    変数について何か注意がありますか

    >>> ans  =  input('>')

    >'
    定義していない変数を使うとエラー表示がでます。ときどき失敗します。'

  •  
  •  




     

  • 生成された値がどこからも参照されなくなると

  • 自動的に破棄される。
                  ガーベッジ・コレクション


  • x、y、z・・・ 一般的な変数名の別種
    f、g、・・・ ファイル処理の変数名
  • lines・・・複数行のリスト
    s 文字列
    n・・・整数
    i、j、k・・・ループ変数
    b・・・バイナリデータ

  • 参照 パリ インスチュール研究所webより


  • 1.1.2. Variables

    So far, we have manipulated values (integers, floats and strings). Instead of manipulating values directly, litterally, you can associate a name to a value and access to the value through the associated name:
    >>> a = 3 
    >>> a
    3
    
    This name is called a 'variable', because its value can change.
    
    Above, the interpreter displays the value (3) of the variable (a).
    
    >>> myVar = 'one sentence'
    >>> myVar
    'one sentence'
    
    Variable names follow specific rules. See what happens below:
    
    >>> 1string = 'one string'
      File "<stdin>", line 1
          1string = 'one string'
                ^
    SyntaxError: invalid syntax
    
    
    >>> myvar
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    NameError: name 'myvar' is not defined
    
    What happened?
    
    >>> a = 2
    >>> a
    2
    >>> a * 5
    10
    >>> b = a * 5
    >>> b
    10
    >>> a = 1
    >>> b
    10
    
    Why hasn't b changed?
    
    >>> a = 1    in this case a is a number
    >>> a + 2
    3
    >>> a = '1'   in this case a is a string
    >>> a + 1
     Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    TypeError: cannot concatenate 'str' and 'int' objects 
    
    What do you conclude?
          

  • 1.1.3. Strings

    Some magical stuff, that will be explained later:
    >>> from string import * 
    
    We can also perform calculus on character strings:
    
    >>> codon='atg'
    >>> codon * 3
    'atgatgatg'
    >>> seq1 = 'agcgccttgaattcggcaccaggcaaatctcaaggagaagttccggggagaaggtgaaga'
    >>> seq2 = 'cggggagtggggagttgagtcgcaagatgagcgagcggatgtccactatgagcgataata'
    
    
    How do you concatenate seq1 and seq2 in a single string?
    
    
    >>> seq = seq1 + seq2
    
    What is the length of the string seq?
    
    >>> len(seq)
    120
    
    Does the string seq contain the ambiguous 'n' base?
    >>>  'n' in seq
    False
    
    Does it contain an adenine base?
    >>> 'a' in seq
    True
    
    >>> seq[1]
    'g'   
    
    Why? 
    Because in computer science, strings are numbered from 0 to string length - 1
    so the first character is:
    >>> seq[0]
    'a'  
    
    Display the 12th base.
    
    >>> seq[11]
    't'
    
    Find the index of the last character.
    
    >>> len(seq)
    120
    
    So, because we know the sequence length,  we can display the last character
    by:
    >>> seq[119]
    'a'
    
    But this is not true for all the sequences we will work on.
    Find a more generic way to do it.
    
    >>> seq[len(seq) - 1] 
    'a'
    
    Python provides a special form to get the characters from the end of a string:
    
    >>> seq[-1]
    'a'
    >>> seq[-2]
    't'
    
    Find a way to get the first codon from the sequence
    >>> seq[0] + seq[1] + seq[2]
    'agc'
    
    Python provides a form to get 'slices' from strings:
    >>> seq[0:3]
    'agc'
    
    You can omit the first indice of the range if it's 0:
    >>> seq[:3]
    'agc'
    
    >>> seq[3:6]
    'gcc'
    
    
    
    How would you access the slice of the 3 last characters?
    Hints: you want the positions -3 -2 and -1. 
    Do not forget that the last indice of the slice should be le last position + 1.
    
    >>> seq[-3:len(seq)]
    'ata'
    
    You can omit the second indice of the range if it's len(seq):
    >>> seq[-3:]
    'ata'
    
    How many of each base does this sequence contains?
    
    >>> count(seq, 'a')
    35
    >>> count(seq, 'c')
    21
    >>> count(seq, 'g')
    44
    >>> count(seq, 't')
    12
    
    Count the percentage of each base on the sequence.
    Example for the adenine representation
    
    >>> long = len(seq)
    >>> nb_a = count(seq, 'a')
    >>> (nb_a / long) * 100
    0
    
    What happened? How 35 bases from 120 could be 0 percent?
    This is due to the way the numbers are represented inside the computer.
    
    >>> float(nb_a) / long * 100    
    29.166666666666668
    
    Now, let us say that you want to find specific pattern on a DNA sequence:
    
    >>> dna = """tgaattctatgaatggactgtccccaaagaagtaggacccactaatgcagatcctgga
    tccctagctaagatgtattattctgctgtgaattcgatcccactaaagat"""
    >>> EcoRI = 'GAATTC'
    >>> BamHI = 'GGATCC' 
    
    Looking at the sequence you will see that EcoRI is present twice and
    BamHI just once:
    
    tgaattctatgaatggactgtccccaaagaagtaggacccactaatgcagatcctgga
     ~~~~~~                                                ~~~ 
    tccctagctaagatgtattattctgctgtgaattcgatcccactaaaga
    ~~~                          ~~~~~~
    
    >>> count(dna, EcoRI)
    0
    
    Why ??
    
    >>> 'atgc' == 'atgc'
    True
    >>> 'atgc' == 'gcta'
    False
    >>> 'atgc' == 'ATGC'
    False
    
    why are 'atgc' and 'ATGC' different?
    
    We can convert the case of a string:
    
    >>> EcoRI = lower(EcoRI)
    >>> EcoRI
    'gaattc'
    >>> count(dna, EcoRI)
    2
    >>> find(dna, EcoRI)
    1
    >>> find(dna, EcoRI, 2)
    88
    >>> BamHI = lower(BamHI)
    >>> count(dna, BamHI)
    0
    
    Why ?
    
    Tip: display the sequence:
    
    >>> dna
    'tgaattctatgaatggactgtccccaaagaagtaggacccactaatgcagatcctgga\ntccctagctaagatgtattattctgctgtgaattcgatcccactaaagat'
    
    What is this '\n' character?
    
    How to remove it?
    
    >>> dna = replace(dna, '\n', '')
    >>> dna
    'tgaattctatgaatggactgtccccaaagaagtaggacccactaatgcagatcctggatccctagctaagatgtattattctgctgtgaattcgatcccactaaagat'
    >>>find(dna, BamHI)
    54  
    
    Using the mechanisms we have learnt so far, produce the complement of
    the dna sequence.	    
    
          

    1

  • http://www.greenteapress.com/thinkpython/
  •  

  • 2

    3
    ホーム     戻る