ホーム     戻る

 草の背を 乗り継ぐ風の 行方かな

 草茫々忘れ残せし夢と思へ

 むかし父ありき麻服パナマ帽 

 むかし母すだれ巻き上ぐる腕白し 

 海怖ろし波がつぎつぎと手を挙げて

 (句集 風のかたみ 多田智満子 詩人 )

 2014/01/31

改訂中
 http://www.tobari-kaikei.com/cgi-bin/login.cgi


第7章 ステートメント例外処理 流れ制御 
           条件判断 繰り返し   loop statement..
        if 文 for文 while文 

 学習の要点
 pythonプログラムの構造復習
 if 条件文statement 条件分岐
 for 文statement   繰り返し処理
 while文statement  繰り返し処理 特定の値になるまで実行

  例外処理 try except  
 for
文の基本をもう一度
 配列を使った一般的例
 while文をさらに
 まとめ

  (1)学習の要点

 ステートメントとは何かを学ぶ

 何度も繰り返し処理する面倒なことをコンピュータに処理させる

 繰り返しの中で同じことを繰り返すと、そのたびに変化すものがあ
 る。

 何が同じでなにが違うか認識する。

 変化する部分を変数にする  繰返変数

  
 
 (2)pythonプログラムの構造復習

 1・Pythonプログラムの構造

   statement:文 プログラムとして示す文

    expression 式: 値を算出する式

  pythonのコロン : と字下げ

  字下げにはpython idle統合環境を利用して、自動的字下げ
  作用を利用できる。ブロック理論に従って、修正する。眼で見た
  感覚だけでは対応が難しい。また、ブロック構造だけの、骨とな  
  部分だけのコードを先ず書いてから、内容を充填して行く方法を
  とる。  

  

   
        
 ーーーーーーーーーーーーーーーーーーーーーーー

  (3) if 条件文 条件分岐の例
 
 def bunki():
   import datetime             <モジュールを呼び出す
   today = datetime.datetime.now()
   print(today)                <今日の日付
   i f today.weekday() < 5 :        <0-5月-金
       print("働こう!")
   if today.weekday() >=5 :         <6、7土日
       print("お休み")

 >>> bunki()

 2010-07-29 11:05:22

    働こう!

 if 文

  ある条件によって処理を分岐したい場合にif文を使う。 条件に応じてそ
 の後の処理を変える、

 if 文

 if 条件式説明1:
  条件式が真の時に実行する処理1
  条件式が真の時に実行する処理2

 「if」文は複合文と呼ばれるものの1つ。複合文とは他の文を内部に持ち、
 内部の文を実行するかどうかなどの制御をコントールするもの。インデン
 ト
で「複合文とブロック」を表現。

 
amari = 10 % 3           % 余り算出

 if amari != 0:        != 等しくない
     print ("割り切れませんでした")
     print ("余りは", str(amari), "です")
  str整数   
                          <3で割ったあまりがamariに代
                           入される

  Pythonではどの文がどこのブロックに含まれるのかをインデントによっ
 て表現。見た目で表される構造がそのままプログラム内の構造となる。

 if 条件式説明2

   「if」文でまず処理を実行するかどうかを決める条件式
    を記述する。
        
  条件式が真の時に実行する処理1

   条件が成立する場合に次の行以降の処理が行われ
      る。
      条件式の後にコロン「:」を記述する。
   実行される複数の文はブロックという単位でまとめら
      れる。
   条件式が成り立つ時を「条件式が真」と言い、条件式
      が成り立たない時を「条件式「偽」と言う。
 
  条件式が偽の時に実行する処理2

 
 条件: yes・noのはっきりしたもの
 

 if      もし  ならば
 条件式が成り立つ(真True)のとき  ある処理を実行

 elif      つぎに  ならば

 次の条件式が成り立つ(真True)のとき  ある処理を実行    
 いくつでも増加できる。

 else      でなければ       

 成り立たない時(偽False)のとき  ある処理を実行    


 考え方: 
 分岐先で何をするのかをまず考える。
 まず結果として欲しいものを発見する。
 次に何を使うかを把握する。
 (1)どんな結果がほしいかを確認(変数の宣言)
 (2)どんなデータが利用できるか。(変数の宣言
 (3)何をするのか、確認。(代入、演算などの文)
 (4)そのための条件を確認。
 

 例 贈与金額を得て贈与税を計算する

  def 贈与税額(贈与金額):    贈与税額は関数名 贈与金額は仮引数
        if 贈与金額<=2000000 :         条件文
           贈与税額=(贈与金額-1100000)*0.1 式expression 
           print ("贈与税額は")         
           return 贈与税額            返り値
       elif 贈与金額<=3000000 :
            贈与税額=(贈与金額-1100000)*0.15-100000
            print("贈与税額は")
            return 贈与税額
       elif 贈与金額<=4000000 :
            贈与税額=(贈与金額-1100000)*0.20-250000
            print("贈与税額は")
            return 贈与税額
       elif 贈与金額<=6000000 :
            贈与税額=(贈与金額-1100000)*0.30-650000
            print("贈与税額は")
            return 贈与税額
       elif 贈与金額<=10000000 :
            贈与税額=(贈与金額-1100000)*0.40-1250000
            print("贈与税額は")
            return 贈与税額
       else :
            贈与税額=(贈与金額-1100000)*0.50-2250000
            print("贈与税額は")
            return 贈与税額

 実行例 呼び出しと実引数12000000を入力する。関数名はローマ字 
       変換、実引数は英数にしなければならない。

           12000000は贈与金額                            
                          の実引数
  >> 贈与税額(12000000)
    贈与税額は
    3200000.0

  例2 input関数と変数xを使用、関数名を英語にし、パラメータを 
    仮引数をなくした。
    プログラムの記述と呼び出しが簡単になる。
    呼び出しはzoyozei()となる。

 def zoyozei() :
        x=input("贈与金額は>")
        x=int(x)             input関数で入力されたものは
                     文字列オ              
                     ブジェクトなのでint関数で整数
                     する
        x=x-1100000
        if x<=2000000 :
            return x*0.1
        elif x<=3000000 :
            return x*0.15-100000
        elif x<=4000000 :
            return x*0.2-250000
        elif x<=6000000 :
            return x*0.3-650000
        elif x<=10000000 :
            return x*0.4-1250000
        else :
            return x*0.5-2250000
      

   求めるもの:入場料金
 データ:年齢
 方法:年齢入力、if文
 条件:15才以下が真か偽

 def ryokin():
    a=int(input("年齢はいくつ>"))       <変数aに年齢の入力を促
                              す
    if a <= 15 :                   <年齢により分岐
        print("入場料は1000円です。")    <結果出力
    else :                       <年齢により分岐

        print("入場料は1500円です。")    
<結果出力

  >>> ryokin()
 
年齢はいくつ>12
 
 入場料は1000円です。

 
>>> ryokin()
 年齢はいくつ>32
 
 入場料は1500円です。

    値で振り分けるパタ−ン

 求めるもの:誕生石
 データ:変数 
month 
 方法:month入力、if elif else
 条件:garnet,amethst
 ,aquamarine,diamond,
     emerald,pearl,ruby,peridet,sapphire
     opal,topaz,turqois,unknwn

 def 誕生石():
    a=int(input("生まれつきは1-12>"))
    if a == 1 :                 ==同一
        print("ガーネット")
    elif a == 2 :
        print("アメジスト")
    elif a == 3 :
        print("アクアマリン")
    elif a == 4 :
        print("ダイヤモンド")
    elif a == 5 :
        print("エメラルド")
    elif a == 6 :
        print("パール")
    elif a == 7 :
        print("ルビー")
    elif a == 8 :
        print("パール")
    elif a == 9 :
        print("サファイア")
    elif a == 10 :
        print("オパール")
    elif a == 11 :
        print("トパーズ")
    elif a == 12 :
        print("ターコイズ")
    else :
        print("わからない")

 >>> 誕生石()
 生まれつきは1-12>5
 
    エメラルド
 
>>> 誕生石()
 生まれつきは1-12>11
 
    トパーズ.

   

 −−−−−−−−−−−−−−−
 
   
  
求めるもの 西洋歴換算明治

 def meiji():
    year  =  1900
    input ('year>')

    if year  == 1868 :
        print ("明治元年")
    else:
        if year == 1912 :
            print ("大正元年")
       else :
            print ("明治",year-1867,"年")

  

 
>>> meiji()
 year>1878

   明治 33 年

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーー


求めるもの 西洋歴換算大正

 def taisho():
    year = input ('year>')
    if int(year) == 1868 :
        print ("明治元年")
    elif 1869 <= int(year) <= 1911:
    #明治の年号
        print ("明治",int(year)-1867,"年")
    elif 1912 == int(year):
        print ("大正元年")
    elif 1912 <= int(year) <= 1927:
        print ("大正",int(year)-1912,"年")

 >>> taisho()
 year>1923

   
大正 11 年

   求めるもの 同族会社判定

 法人税法上の同族会社に該当するかどうかの判定構文は簡単ですが、 
 法 税法の正確な読み取りが必要。

 def 同族判定():
    print ('まず持株割合について質問します。')
    第一順位 = input('第一順位の持株数>')
    第二順位 = input('第二順位の持株数>')
    第三順位 = input('第三順位の持株数>')
    合計株数 = input('合計株数>')
    持株数 = int(第一順位) + int(第二順位) + int(第三順位)
    持株割合 = (持株数) / int(合計株数)
    print (持株割合)
    print('株主グループの議決権割合について質問します。')
    第一議決権 = input('第一グループの議決権数>')
    第二議決権 = input('第二グループの議決権数>')
    第三議決権 = input('第三グループの議決権数>')      
    合計議決権 = input('合計議決権数>')
    議決権数 = int(第一議決権) + int(第二議決権) + int(第三議決
  権)
    議決権割合 = int(議決権数) / int(合計議決権)
    print(議決権割合)
    if 持株割合 > 議決権割合:
           判定基準 = 持株割合
           if 判定基準 > 0.5 :
               print('同族会社に該当します。')
           else:
               print('非同族会社です。')

    else  :
           判定基準 = 議決権割合
           if 判定基準 > 0.5 :
               print('同族会社に該当します。')
          
         
  else:
               print('非同族会社です。')

 >>> 同族判定()
 まず持株割合について質問します。
 第一順位の持株数>
240
 第二順位の持株数>
160
 第三順位の持株数>
100
 合計株数>
1000
 
 0.5
 
 株主グループの議決権割合について質問します。
 第一グループの議決権数>
240
 第二グループの議決権数>
100
 第三グループの議決権数>
80
 合計議決権数>
500
 
 0.84
  同族会社に該当します。

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 求めるもの.消費税の課税対象判定

 print('輸入取引を除く消費税に関する質問です。')
 print('yes no で答えてください')
 q1 =input('国内取引ですか>')
 q2 =input('事業者が事業として行った取引ですか')
 q3 =input('対価を得て行った取引ですか:みなし譲渡等を含む')
 q4 =input('資産の譲渡・貸付・役務の提供ですか')
 q5 =input('非課税取引ですか')
 q6 =input('免税取引ですか')
 if q1=='no' or q2=='no' or q3=='no' or q4=='no':
    print('不課税です。')


 if q5=='yes':
    print('非課税です')
 if q6=='yes':
    print('免税です。')
 if q1=='yes' and q2=='yes' and q3=='yes' and q4=='yes' and q5=='no'  
 and q6 =='no':
    print('課税です。')

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 求めるもの 飲み物選択

 def nomimono():
  print( '飲み物を選んでください')
  print( '1 コーヒー 2日本茶 3 ウーロン茶')
  i=input ('品番を半角英数で入力してください>')
  if int(i) == 1 :
    print ('コーヒー')

  elif int(i) == 2 :
    print ('日本茶')
  elif int(i) == 3 :
    print( 'ウーロン茶')
  else :
    print ('ありません')

 実行

 >>> nomimono()
 飲み物を選んでください
 1 コーヒー 2日本茶 3 ウーロン茶
 品番を半角英数で入力してください>
1

  コーヒー
 >>> nomimono()
 飲み物を選んでください
 1 コーヒー 2日本茶 3 ウーロン茶
 品番を半角英数で入力してください>
2
 
 日本茶
 >>> nomimono()
 飲み物を選んでください
 1 コーヒー 2オレンジジュース 3 ウーロン茶
 品番を半角英数で入力してください>
3
 
 ウーロン茶

 
 飲み物を選んでください
 1 コーヒー 2オレンジジュース 3 ウーロン茶
 品番を半角英数で入力してください>
5

  ありません

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 求めるもの 暗証番号

  def ansho():
  print ('暗証番号を入力してください')
  i = input('暗証番号>')
  if  i == 'tt930' :
    print( '金庫が開きました')
  else :
    print( '番号が違います。1')
    print ('もう一度入力してください。')
    i = input('暗証番号>')
  if  i == 'tt930' :
    print( '金庫が開きました')
  else :
    print ('番号が違います。2')
    print( 'もう一度入力してください。') 
  if  i == 'tt930 ':
    print( '金庫が開きました')
  else :
    print( '')

 

 実行

 >>> anshoban()
 暗証番号を入力してください
 暗証番号>
tt9876
 
 番号が違います。
 もう一度入力してください。
 暗証番号>
tt930
 
 金庫が開きました

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

 求めるもの 問答
 

 >>>def  ifq():
     print('君の名前は?')
     name = input('>')
     if  name == '戸張':
       print(name , '君ようこそ!')
     else:
             print('さようなら')

 >>> ifq()
 君の名前は?
 >
戸張

  戸張 君ようこそ!
 >>> ifq()
 君の名前は?
 >山本
 
 さようなら

  求めるもの 10人の点数を入力して60点以上を合格とする。合
   格・不合
格の数を計算する。  
 
>>>  gokaku  =  0                 < 変数の初期化
 >>>  fugokaku  =  0
 >>>  i = 0
 >>>  for  i  in  range(10) :            <
繰り返し回数
         tensu  =  input("点数>)"        <
ユーザ入力を促
                              す
         if  tensu  <  60  :            <条件分岐
              fugokaku  += 1           <連続和
        elif  tensu  >=  60  :
                 gokaku  +=  1
 >54                          <
ユーザ入力
 >67
 >78
 >
98
 >
45
 >
78
 >
36
 >
70
 >59
 >60
 >>>  print (gokaku)                  < 
結果出力
 6
 >>> print (fugokaku)
 4

 求めるもの 昭和平成

 year  =  1950
 if  year  >= 1989:
    print (year,'=HEISEI',year - 1989,' nen')
 elif  year >= 1926:
    
    print( year,'SHOWA ',year - 1925,' nen')
 1950 SHOWA  25  nen

  (4)for 文

 繰り返し処理の1つであるfor文。
 for 変数 in オブジェクト:
  実行する処理1
  実行する処理2

for」文はシーケンス型のオブジェクトから要素を順に変数に代入し、要素の数だけ繰り返しを行う。文字列が指定された場合は文字を1文字ずつ変数に代入しながら繰り返しを行い、リスト型のオブジェクトを指定した場合はリストの要素を先頭から順に変数に代入しながら繰り返しを行う。オブジェクトに含まれる要素の数だけ繰り返しが行われる。
繰り返しが1回行われる度にブロック内の処理を実行。
シーケンス 順番で処理するデータ構造

for num in [4, 3, 12]:
  print ("num = " + str(num))
 print( "End")
 
num = 4
num = 3
num = 12
End

for num in [4, 3, 12]:
 
print ("num = " + str
(num))
else:
 
print
( "End")
 
num = 4
num = 3
num = 12
End

for文の終了時の処理(for...else)

for」文はシーケンス型のオブジェクトを変数に代入しながら繰り返しを行うが、繰り返しが終了した時に実行される処理elseを記述できる。
for 変数 in オブジェクト:
  実行する処理1
  実行する処理2
else:
  実行する処理1
  実行する処理2
while」文の場合と同じく「for」文が終了する時に「else」文が記述されていた場合は「else」文のブロック内の処理を実行。「else」文のブロックは実行された後で「for」文全体が終了。

上記ではリスト型のオブジェクト[4, 3, 12]から要素を順に取り出し繰り返し処理を行い、全ての要素を取り出し終わったら「else」文のブロック内の「print ("End"」)が実行される。
while」文の場合と同じく、繰り返しの中で「break」文によって繰り返し処理が終了した場合には「else」文のブロック内の処理は実行されない。
リスト型のオブジェクト[4, 3, 12]は>>コンテナという。
 
for文とrange関数を使った指定回数の繰り返し 

「for」文はではシーケンス型のオブジェクトから要素を取り出しながら繰り返し処理を行うが、指定した回数だけ繰り返しを行いたい場合にはrange関数を使って連続した数値の要素を持つリスト型のオブジェクトを作成利用。 

for var in range(0, 10):
  実行する処理1
  実行する処理2

range関数は引数に指定した開始と終了の数値から連続する数値の値(終了の値は含まない)を要素として持つリスト型のオブジェクトを作成。

for var in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
  実行する処理1
  実行する処理2
繰り返し回数が多い場合にrange関数を使う。 

sum = 0
for num in range(1, 11):
  sum += num;

print( "sum = " + str(sum))

sum = 55                      <実行結果

 pythonのfor文は、cやpascalとすこし違う。
 pascalのように常に等差級数を使って反復をかけたり、cのようにユーザ  
 に反復と停止条件を定義させたりするのではなく、あらゆるシーケンス(リ
 ストや文字列)のアイテムに対し、そのシーケンスの順で反復をかける。次
 のようになる

  繰り返し処理はコンピュータの能力を最大に発揮する処理。
 重要なのは何度もやるというイメージ
  
for文はリストなどを先頭の要素からひとつずつ取り出して順に処理してゆ
  く。

  >>> # 文字列を計算する
    >>> a=['mitukosi','takasimaya','matuya']
    >>> for x in a :
              print(x,len(x))      
 lenで文字数を計算

 
          mitukosi 8      
          takasimat 10
           matuya 6

 range()関数

 数字の連なりに反復をかけるときは、ビルトイン関数range()が便
 利。

 >>> list(range(10))
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  与えられた終端値がリストにはいることはない。range(10)が生成
   する10個のリストの値は、ちょうど長さ10のシーケンスの各アイ
   テムへのインデックスになる。rangeは他の数字からはじめること
  もできるし、増分(ステップ)を指定することもできる。

  >>> list(range(5,10))
    
     [5, 6, 7, 8, 9]
  >>> list(range(0,10,3))        3桁ごとの数
     
     [0, 3, 6, 9]
  >>> list(range(-10,-100,-30))
    
     [-10, -40, -70]

 シーケンスのインデックスに反復をかけたいときは、range()とlen()
  を組み合わせる。

 >>> a=['taro','had','a','little','toy']

 >>> for i in range (len(a)):
        print(i ,a[i])

 
 0 taro
 1 had
 2 a
 3 little
 4 toy

 break文とcontinue文、ループにおけるelse節

 break文はそれを囲んだもっとも小さいforまたはwhile文を抜ける。
 continue文はループの残りを飛ばして次回の反復に進める。
 これらのループ文にelse節を加えられる。else節は、リストを使い果たした 
 り(for),条件式がfalseになることで(while)ループが終了した場合に実行
 さ
 れる。break文で終了した場合は実行されない。

   繰り返し変数 for文に添えて変数名を記述する。事前に変数定義をしな
 い。シーケンスの内容を自動的に変数に代入しながら繰り返し処理する。
 下記のコードでは、{ word}が繰り返し変数。

  >>> words = ["this"  , "is", "a" ,"banana"]
  >>> for word in words :
             print(word)

 
this
is
a
banana

 >>> numbers = [0,1,2,3,4,5]
 >>> for number in numbers :  numberが繰り返し

                                            変数
           print(number)

 
0
1
2
3
4
5

  range()関数

 >>> range(0,5)
  >>> list(range(0,5))
[0, 1, 2, 3, 4]

  >>> a=range(0,5)
  >>> list(a)
[0, 1, 2, 3, 4]

 parallel iterationについて

 >>> names=["taro","hanako","jiro","hitomi"]
 >>> ages=[18,32,26,30]

 >>> forin range(len(names)):
            print(names[i], " is" , ages[i],"years old")

 taro  is 18 years old
 hanako  is 32 years old
 jiro  is 26 years old
 hitomi  is 30 years old

---------------------

 zip : return a list of tupleについて
 
for ループでzip関数を使う。
 二つのシーケンスに対して同時にループ処理を行う。
 >>> b=zip(names,ages)
 >>> list(b)
[('taro', 18), ('hanako', 32), ('jiro', 26), ('hitomi', 30)]

 def f():
    list_toh=[5349,5478,5344,4644,4968,6259] 
                                                      
<東北各県の一世帯あ
                            た                        
                                                          り納豆年間購入価額
    list_sik=[3148,2991,2966,2457]       <四国各県の一世帯
                                                          あた                         
                                                          り納豆年間購入価額

    for val in list_toh :                                 
<val 繰り返し変数


        print(val)                    <リストの内容を表
                                                              示
    ave_toh=0.0
    a=sum(list_toh)                  <リストの合計値を
                                                             計算
           
    ave_toh =a /len(list_toh)            <合計値を要素数
                                                                で割っ                       
                                                                       て
                               平均値を算出
    print("ave_toh=",ave_toh)           <平均値を表示
    for val in list_sik :                 <同様に四国各
                                                                      県につい
                                て計算し、表示
                                                                      する
        print(val)
    ave_sik=0.0
    b=sum(list_sik)
           
    ave_sik =b/len(list_sik)
    print("ave_sik=",ave_sik)
          >>> f()
5349
5478
5344
4644
4968
6259
ave_toh= 5340.33333333
3148
2991
2966
2457
ave_sik= 2890.5 
 

   求めるもの: 文字列から要素を取り出す
 データ:    
word
 
方法:     for文 in print
 条件:     
最初の要素から順番に

 >>> for c in 'word': print( c)  cが繰り返し変数

 w
 o
 r
 d

 >>> for word in ('one','word', 'after', 'another'): print (word)

 one                              word繰り返し変数
 word
 after
 another

  求めるもの: リストの要素に加工して取り出す

 データ:    リストmylist 
 方法:     for文 in range len print インクリメン
                              ト

 条件:    リストの要素に1回目は最初の要素に1を加
         え2回目はさらにそのリストの2番目の要素に
         1を加え最後の要素まで繰り返す

 def mylist():
    myList = [1,2,3,4]
    for index in range(len(myList)):
            myList[index] += 1      
            print (myList)

 >>> mylist()
 
[2, 2, 3, 4]
 [2, 3, 3, 4]
 [2, 3, 4, 4]
 [2, 3, 4, 5]

      例4

  >>> name=['中山','大山','中村','鈴木','高橋']

 >>> for i in name :
    
         print(i)
     
          if i =='中村':
 
    
              breake

 
 中山
 大山
 中村

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー


 

 s = {101:'現金',102:'小口現金',103:'当座預金'}                               
               <  辞書
反復制御の条件としてのコンテナ   
                         
                       (タ プル、リスト、辞書、文字列等)

 >>> for k, v in s.items():  < 辞書型でitemsメソッドでキーと値
                                          のタブ
                     ル                                  
                     を返す 
          
          print ('%s :%s' % (k,v,))

 
 101 :現金
 102 :小口現金
 103 :当座預金

 

    例    名簿を作る 
       
        python3.0から、input関数には文字列が

       入力される。

       漢字がそのまま入力できる。変わりに文字列を数値と

       して使いたい場合
       
        はint()関数で変換する。

 def meibo():
    for i in range(2):
     name = input('name名前漢字可>')
     sei = input('sei男1女2英数小文字>')
     umare = input('umare早生1遅生2>')
     kyoudai = input('kyoudai有1無2>')
     s = [name,int(sei),int(umare),int(kyoudai)]
     print (s)

 >>> meibo()
 name名前漢字可>
高橋
 sei男1女2英数小文字>
1
 umare早生1遅生2>2
 kyoudai有1無2>
1
 ['高橋', 1, 2, 1]
 name名前漢字可>
鈴木
 sei男1女2英数小文字>
2
 umare早生1遅生2>
1
 kyoudai有1無2>
1
 ['鈴木', 2, 1, 1]

 例7−1   繰り返し処理の中断 continue  break

 continue :それ以降の処理をせず中断し、次の繰り返しに移る

 break    : 繰り返しそものを抜ける

for item in "1,2,pass,3,4,end,5,6".split(","):  <  コンテナ
    if item =="pass":                 <  条件
        continue                     <  続行
    elif item == "end":                <  条件
        break                       <  無条件中断
    print (item)                    
 <  処理

 1
 2
 3
 4

   for loop         <  繰り返しの回数の回数をあらかじ
                  め決
                  めてお
                  く
 for  i  in  range(4) :<   range()関数は0から3までの整数のリス
                 トを変
                 数 
                 に返す。
 if  i  == 0 :      <  変数 i が0の時caseAと出力 
     print ('case A' ) <   以下変数 i のリストの終わりまで繰り
                  返す。
 if  i  == 1 :
    print( 'case B ')
 if  i  == 2 :
    print( 'case C ')
 if  i  == 3  :
    print ('case D ')
 
case A             <     出力結果
 case B
 case C
 case D     

 例

 >>> for  i  in  range(10):
          print  (i,)             < コンマがあるので改
                           行しない

 
 0 1 2 3 4 5 6 7 8 9       

 >>> for  i  in  range(10):    < 二つの文を実行する
         
 print (i,)
           print ( i *1)

 
 
0 0
 1 1
 2 2
 3 3
 4 4
 5 5
 6 6
 7 7
 8 8
 9 9    

  
 
  例  確定申告書の最終日前4日間の申告書受理状況

 def sinkoku():
    sinkokusu=5000               <前日までの申告書数
    for i in range(0,4):      <最終4日分を計算
        s =int(input("kazu>"))  <その日の申告書受理数の入力
        sinkokusu=sinkokusu+s <累計計算
        print(i+1 ,"kai",sinkokusu,"mai") <結果出力

 >>> sinkoku()
 >>> sinkoku()
kazu>3200
1 kai 8200 mai
kazu>4100
2 kai 12300 mai
kazu>
5500
3 kai 17800 mai
kazu>
8700
4 kai 26500 mai


 (5)while文
  
前提
  whileの基本的な仕組み

 def w():
    import random
    rand_num=0
    while rand_num !=4:  <条件が真なら繰り返す
        rand_num=random.randint(0,9)
        print(rand_num)

 >>> w()
9
9
7
8
3
0
9
9
9
3
4 
                <条件が偽なのでwhile文
                  が終了した

 continueとbreakを使う
 continueで繰り返しの先頭に戻り、breakで繰り返しが終わる

 def w2():
    import random
    rand_num=0
    while True :             <Trueである限り無限ループ
        rand_num=random.randint(0,9)
        print(rand_num)
        if rand_num !=4:
            continue
        else :                 <Falseであると終了する
           
break

  >>> w2()
2
6
4

    特定の値になるまで実効するパターン
   一定の条件が成立する間は処理をつづける。条件が成立しなくなる
     と、処理の
   繰り返しが終了する。

   while : 続く条件式が真Trueである間ループを続ける  
          breakメソッドでも同様

 条件式:
  条件式が真の時に実行する処理1
  条件式が真の時に実行する処理2
 「while」文では、条件式が真(True)の間繰り返し実行する。
  「while」文はブロック内の処理を実行した後は改めて条件式を評価し、条 
   件式が真の間は繰り返しブロック内の処理を実行する。

  求めるもの: 0から10までの数値を偶数と奇数に判別

 データ :  変数 i

 方法 :   while文 def if else文 print インクリメ
                               ント %d

 条件:    書式表現

 def 繰り返し3():
    i = 0
    while i <10 :
        i +=1
        if i % 2 :
                print ("%d is odd" % i)
        else :
                print("%d is even " % i )

 >>> 繰り返し3()
 1 is odd
 2 is even
 3 is odd
 4 is even
 5 is odd
 6 is even
 7 is odd
 8 is even
 9 is odd
 10 is even 

 例1

 >>> x = 10
 >>> while x >=0 :   <特定の値 x=0
        print(x)
        x = x - 1  <1ずつ減る繰り返し

 
 10
 9
 8
 7
 6
 5
 4
 3
 2
 1
 0
>>>

 例2

 >>> v = True

 >>> count = 0

 >>> while v
:
         count = count + 1    <1ずつ増える繰り返し
        
         if count ==5
:
          
             v =
False       <特定の値 
             print( count)

 1
 2
 3
 4
 5

 例3

 >>>  x=10

 >>> while x:
         x  -=1           <1ずつ減る繰り返し
         if x % 2 !=0:
continue  <特定の値 2で割ったあまりが0でない場
                     合continue 
            print (x)

 8 
 6
 4
 2
 0

−−例4−−−−−−−−−−−−−−−−−−−−

 def kuri():
    i=0
    while i < 5 :         <繰り返しの条件
        print("i= ",i)
        i = i+1           <1ずつ増加する 

 >>> kuri()
i=  0
i=  1
i=  2
i=  3
i=  4
 

 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

  例5 1から10までの合計値   繰り返し条件

 >>> total = 0
 >>> i = 0
 >>> while i < 10:
       i = i + 1       <繰り返し回数iの値が1ずつ増加
       total = total + i  <増加したiの値が前のiの値に加算される
       print (total)
     <10回繰り返されたときのtotalの値をまで
    
                 printする。
 1
 3
 6
 10
 15
 21
 28
 36
 45
 55
 
 例6

 >>> i=1
 >>> while  i < 3:                  <  
1との比較をおこなう
          print (i,"\n")
          i += 1                < 
iが3より小さいとき実行
                         <  iが3より大きいとき抜ける 

 
 1

 2

 例7

 >>> a = 1.0
 >>> while 
a <= 10:        <
   条件式を書く。値が真の間ループ
                                          が回る。
       print(
a)
       a += 2          <aの値が2ずつ増加する。

 
 1.0
 3.0
 5.0
 7.0
 9.0

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 例8

 >>> sum = 0
 >>> i = 1
 >>> while  i <= 5:          <
 iについての条件
          sum += i
          i  += 1                 < 
 iの値も増やす
          print (sum ,"\n")

 
 1                        <    0+1=1

 3                        <     1+2=3

 6                        <     3+3=6

 10                       <     6+4=10 

 15                       <     10+5=15

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 例9

 >>> x =  1
 >>> while  x  < 100:
          print (x)
          x =  2 * x

                       <     x
 1                     <     
1
 2                      <    
2*1
 4                      <    
2*2
 8                      <    
2*4
 16                     <    
2*8 
 32                     <    
2*16
 64                     <    
2*32

                       <    2*54>100 計算しない 

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 例10
 def  while7
():
    n=0
    while 1:
         if  n < 10 :
           n = n + 1
           print(n)
           exit   

 >>> while7()
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10   

 

 例11 #フィナボッチ級数
 #2項の和により次項がきまる
 a,b=0,1
 while b < 10 :            <    b<10 が真であるかぎり実行される
    print (b)            <      0 偽 1 真 整数
    a,b =b, a+b>>

 1
 1
 2
 3
 5
 8

 

  例12

 def name():

  name=''
  while not name:
    name=input('please enter your name:')
    print('hello ! ',name)

 hello !  taro yamada

 例13

 >>> def p():

        a=1
        s=''
        while a<=5:
            s+='*'
            a+=1
            print(s)

 >>> p()
 *
 **
 ***
 ****
 *****

 >>> def q():

         d=5
         while True:
              d+=1
              if d> 1000:
                print(d)
                break


 >>> q()
 1001

   

 def r():

 d=0
 while d<=10:
     d+=1
     if d %3 != 0:
       
 continue
     print (d)

 r()

    3
  6
  9

  例14

 def  while10():
    n = 0
    while 1:
        n = n+1
        if  n > 10:
break
        print(n)
       
 >>> while10()
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10

 例15  while  True   break    待ち条件

                           for in  range( )          回数


  イテレータ : while、 for in  は繰り返しに使う基本的なイテレータ。
 
 ループ :ある事象が発生する(待ち条件この場合'bye')まで繰り返す

 def  while 11():
  
  while True:
        s = input('>')
        if  s == 'bye':break


 >'今日は'           <  待ち条件が来るまで繰返す。

 '今日は'

 >'良いお天気ですね'    <   自由(任意)な入力

 '良いお天気ですね'

 >'なんて素敵なんでしょう'  <   自由(任意)な入力

 'なんて素敵なんでしょう’

 >bye              <    待ち条件を入力する。

                     ループを抜け出してブロックを終了。

 −−−−−−−−−−−−−−−−−ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 

 (6) 例外処理 try except  ブロック内でエラーの  
     内容を利用する

  プログラムの中でエラーが発生したとき、その後の処理切り替える処理をす
 る仕組み。

 pythonのエラーには2種類ある。

 プログラム実行前のエラー

 1 文法エラー

 2 インデントエラー

 プログラム実行後のエラー

 1インデックスエラー

 その他

 pythonではプログラム処理中にエラーが発生すると例外オブジェクトが
 発 生します。

 エラーの内容を示す英文オブジェクト

 exceotという名前のクラスを親として、分類されている。

 try −−except

 >>> def t():

         d =[1,2,3,]

        try:
           print(d[10])

           print('実行しない')

        except:

           print('エラー')

      
 >>> t()
 エラー
  2.流れ制御をさらに理解する

 まず真偽値から  True False

 (1)比較メソッド                         
比較演算子

 
>>> print( 1 > 2)                    条件が成り立たない
 False                           
 偽のオブジェクトを返す
 >>> print (1 < 2)                    
条件が成り立つ
 True                            
真のオブジェクトを返す
 >>> print( 5  >= 5)
 True
 >>> print (5  <= 4)
 False
 >>> print( 1 == 1)                        
 同等==
 True
 >>> print (2  != 1)                     
 等しくない否定 !=
 True
 >>> print( 'cat'  <  'dog' )      
文字列小文字はabcの順序大文字  
                                       小 文字 
         
                                                       
                                                  混合で比較のときは統一して比較。
 
真True偽Falseは分岐で使われている。

  ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 
 
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 continue   処理を飛ばして実行する

 break    その時点で反復制御を中断する

 a=5
 while True:
    a+=1
    if a>1000:
        print(a)
        break

 1001

 

 構造の説明

 
   >>> from math import sqrt
 >>> for n in range(99,0,-1):
             root = sqrt(n)
             if root ==int(root):
                  print (n)
                  break

 
 81

  

  

 4論理を少し

 分岐その1のテーマを少し変える

 名前がChrisでなくても、good name と出力するように直す。

 (A)
 print(  'hello , what is your name ? ')
 name  =  input('>')
 print ('good day, '  +  name  +   '.')
 if  name  ==  'Chris' :
    print( 'good name  !')
 else :
    if  name  ==  'Tobari'  : <
名前の入力がChrisでなくても、同じ
                                        <
  挨拶文出力         
                                                 
        print (' good name  !')
       
 
 (b)論理演算子  or and  not    条件と条件をつなげる

 >>> I_am_taro  = True

 >>> I_am_dragon  = False

 >>> I_like_beer  = True

 >>> I_eat_book  = False

 >>> print(I_am_taro  and  I_like_beer)
 True
 
>>> print (I_like_beer  and  I_eat_books)
 False
 
>>> print( I_am_dragon  and  I_like_beer)
 False
 >>> print( I_am_dragon  and  I_eat_books)
 False
 >>> print (I_am_taro  or  I
_like_beer)
 True
 >>> print (I_like_beer  or  I_eat_books)
 True
 
>>> print I_am_dragon  or  I_like_beer)
 True
 
>>> print (I_am_dragon  or  I_eat_books)
 False
 
>>> print not( I_am_dragon)
 True
 
>>> print( I_am_taro)
 True
 
>>> print not (I_am_taro)
 False
 
 論理演算子には、論理積を表す "and"、論理和を表す "or"、否定を表す    
 "not" などがある。
 論理和 
and
 両方とも真Trueならば結果は真True、それ以外の場合の結果は偽False  
 である。

 論理和 
or 
 与えられたいずれか少なくとも一つが真Trueであれば真True.。.
 否定 
not
 否定とは、真と偽を反転する論理演算である。否定は英語でNotである。
 
 (c) 繰り返し

 

 
 6 すべてがうまく理解してきているかどうかを確かめる 
 ために、もう一つ例を見てみましょう。(クリス・パイン・プ 
 ログラミングより

>>> while  reqest  !=  'bye' :
       print 'C君になにをしてもらいたいですか?'
       reqest  = input('>')
       print( '” C君、'  +  reqest  + 'してね。”とあなたは言います。')
       print( 'C君の返答')
       print ('Cは '  + reqest  + 'する。” ')
       print ('Papa も'  + reqest  + 'する。”。')
       print ('Mama   も'  +  reqest  + 'する。”。')
       print ('Python  も'  +  reqest  + 'する。”。')
       print( 'Ruby   も'  +  reqest  + 'する。”。')
       print( 'Perl      も'  +  reqest  + 'する。” ')
 
 C君になにをしてもらいたいですか?
 >'読書'
 ” C君、'ごはん'してね。”とあなたは言います。
 C君の返答
 Cは '読書'する。”
 Papa も'読書'する。”。
 Mama   も'読書'する。”。
 Python  も'読書する。”。
 Ruby   も'読書'する。”。
 Perl       も'読書'する。”
 C君になにをしてもらいたいですか?
 >'掃除'
 ” C君、'掃除'してね。”とあなたは言います。
 C君の返答
 Cは '掃除'する。”
 Papa も'掃除'する。”。
 Mama   も'掃除'する。”。
 Python  も'掃除'する。”。
 Ruby   も'掃除'する。”。
 Perl       も'掃除'する
。”
 C君になにをしてもらいたいですか?
 >'おはなし'
 ” C君、'おはなし'してね。”とあなたは言います。
 C君の返答
 Cは 'おはなし'する。”
 Papa も'おはなし'する。”。
 Mama   も'おはなし'する。”。
 Python  も'おはなし'する。”。
 Ruby   も'おはなし'する。”。
 Perl       も'おはなし'する。”
 C君になにをしてもらいたいですか?
 >
'ねんね'
 ” C君、'ねんね'してね。”とあなたは言います。
 C君の返答
 Cは 'ねんね'する。”
 Papa も'ねんね'する。”。
 Mama   も'ねんね'する。”。
 Python  も'ねんね'する。”。
 Ruby   も'ねんね'する。”。
 Perl       も'ねんね'する。”
 C君になにをしてもらいたいですか?
 >'bye'
 ” C君、'bye'してね。”とあなたは言います。
 C君の返答
 Cは 'bye'する。”
 Papa も'bye'する。”。
 Mama   も'bye'する。”。
 Python  も'bye'する。”。
 Ruby   も'bye'する。”。
 Perl       も'bye'する。”
 C君になにをしてもらいたいですか?

 

 (7)for文の基本をもう一度

 まずrange()関数の理解

 range(x,y,step):
xからy−1までの連続する整数から、アイテム間の 
 間

 隔がstepであるリスト
を作成して返す。

 >>>list( range(13))
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
 >>>list( range(3,13))

 [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
   
 >>> list(range(3,13,4))
 [3, 7, 11]
 >>> y =['a,b,c','d,e,f','g,h,i']
 >>> len(y
)
 3

 

 for文の基本形は

 1

 def  for2():
    a = 'string'
    for  i  in  list(range(len(a))):
        print( i)


 0
 1
 2
 3
 4
 5

 

 

 2.def  for3():
    a = 'string'
    for  i  in  list(range(len(a))):
          print( a[1])  あるリストのすべての要素をたどりながら

   

 >>> for3()
 t                                               <
 stringの配列[1]はt

 t                          <stringの要素は6個
 t
 t
 t
 t

 3.def  for4():
    a = 'string'
    for  i  in a:
         print(i)   

 >>> for4()
 s
 t
 r
 i
 n
 g       

 >>>def  for3():
            ss =  ""
            for  c  in "ABC":
                 ss  =  c  +  ss
                 print (ss)

 >>> for3()
 A
 BA
 CBA
 

 >>>  for  x  in [10,20,30]:
          for  y  in [0,1,2,3]:               
              print (x  +  y)
              print ('---')

  10
 ---
 11
 ---
 12
 ---
 13
 ---
 20
 ---
 21
 ---
 22
 ---
 23
 ---
 30
 ---
 31
 ---
 32
 ---
 33

 (8)配列を使った一般的例

 >>> names = ['awk','perl','python','ruby']

 >>> for name in names :
           print( name,"\n")

 
 awk

 perl

 python

 ruby

 (9)while文をさらに

    >>> x =  1
       >>> while  x  < 100:
          print (x)
          x =  2 * x

                               
 1                           
1
 2                           
2*1
 4                           
2*2
 8                           
2*4
 16                          
2*8 
 32                          
2*16
 64                          
2*32

                              2*54>100 計算しない 

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 

 def  while 5():
      comand = ""
      while  comand  != 'exit':
           comand = input('comand>')

 >>> while5()
 comand>
'hello'
 comand>
'python'
 comand>exit

  
 練習問題2 詩人 山村暮鳥の「風景」  の詩を書きだすプログラムを作って 
 みましょう。

 いちめんのなのはな

  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  かすかなるむぎぶえ
  いちめんのなのはな
  
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  ひばりのおしやべり
  いちめんのなのはな
  
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  いちめんのなのはな
  やめるはひるのつき
  いちめんのなのはな。°                                                               

 問題 犬語で伝えよう
 家の愛犬ポチは犬語で話すとワンと答えます。犬語はすべて大文字です。
 大文字以外はウウとうなるだけです。
 貴方が犬語でバイバイと3回繰り返していうまで、犬から離れられません。
 ポチとの会話のプログラムをつくりましょう。

 (10)まとめ

 繰り返しとは何か
   ある回数行いたい
   配列の内容を別のオブジェクトに入れ替えたい
   ある条件が成立するまで繰り返したい

 繰り返し注意点
   何を繰り返すのか
   繰り返しをする条件は何か

 繰り返しの種類と書き方
   構文を利用する  
for while 
   メソッドで実現する

 (1)

 def  for5():
    for  x  in  list(range(1,10,2)):
        print (x)

 >>> for5()
 1
 3
 5
 7
 9

(2)

 #フィナボッチ級数
 #2項の和により次項がきまる
 a,b=0,1
 while b < 10 :                  < b<10 が真であるかぎり実行され
                         る
    print (b)                 < 0 偽 1 真 整数
    a,b =b, a+b

 1
 1

 (3)

 x= "love"
 if x =="love":
     print("i love ruby ,too")

 (4)

 x = "love"
 if x != "love":
     print ("i hate ruby ! because...")

 (5)

 for i in range(10):
    print(i)
  
   0
   1
   2
   3
   4
   5
   6
   7
   8
   9

 (6)

 array=["johon","paul","george","ringo"]
 for name in array:
     print (name)
   

 johon
 paul
 george
 ringo

 まづパスツール研究所のテキストより基礎理論

Chapter 6  while 文 
Iteration反復繰り返し


true. If a = b now, then a will always equal b. In Python, an assignment statement設定文 can make two variables変数 equal, but they don’t have to stay that way:
a = 5
b = a # a and b are
now equal
a = 3 # a and b are
no longer equal


http://www.freenetpages.co.uk/hp/alan.gauld/.

,          .
 

ホーム     戻る