ホーム 戻る
草の背を 乗り継ぐ風の 行方かな
草茫々忘れ残せし夢と思へ
むかし父ありき麻服パナマ帽
むかし母すだれ巻き上ぐる腕白し
海怖ろし波がつぎつぎと手を挙げて
(句集 風のかたみ 多田智満子 詩人 )
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]
>>> for i in 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
3構造の説明
>>> 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
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/.
, . ホーム 戻る
|