|
ホーム 戻る
第7章 流れ制御 条件判断 繰り返し
"多田智満子 詩人"
草の背を 乗り継ぐ風の 行方かな
草茫々忘れ残せし夢と思へ
むかし父ありき麻服パナマ帽
むかし母すだれ巻き上ぐる腕白し
海怖ろし波がつぎつぎと手を挙げて
(句集 風のかたみ )
プログラムの流れを考えるための構文 if elif else
例 1
year = 1900 if year ==1868: 条件が成り立つ print "明治元年" else: 条件がなる立たない print "明治",year - 1867,"年"
例 2
year = 1900 input ('year>')
if year ==1868 : 条件 print "明治元年" else: if year == 1912 : 成立 print "大正元年" else : 不成立
print "明治",year-1867,"年"
year>1905 入力
明治 33 年
例 3
year =input ('year>') if year ==1868 : print "明治元年" elif 1869<=year<=1911: #明治の年号を計算 print "明治",year-1867,"年" elif 1912==year: print "大正元年" elif 1912<=year<=1927: elifはいくつでも書ける
#大正の年号を計算 print "大正",year-1912,"年"
year>1920
大正 8 年
例 4 分析
for i in range(5): sei=raw_input('貴方は男1?、女2?英数小文字1、2で>')
umare =raw_input('貴方は早生まれ1?、遅生まれ?2、英数小文字1、2で>') kyoudai =raw_input('貴方は弟・妹がいるか1?、いないか2?英数小文字、1、2 で>') print sei,umare,kyoudai
>>> s=[121,212,121,112,121] 結果をリストにまとめる
例 5 大小比較
a=input('数値>') ユーザに数値の入力を促す
b=input('数値')
if a>b : 大小を比較する max=a
else: 不成立 max=b print 'max=', max
数値>30
数値>50
max= 50
a=input ('数値を入力>')
b=input ('数値を入力>')
if a>b : max=a print 'max=', a print 'min=', b elif b>a : max=b print 'max=',b print'min=' ,a else : print 'equal'
数 値を入力>20
数値を入力>20
equal 数値を入力>30
数値を入力>20
max= 30 min= 20
まず真偽値から 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 真true偽falseは分岐で使われている。 (2)分岐その1 論理演算子
構造の説明
条件:yes・noのはっきりしたもの if もし ならば 条件式が成り立つ(真true)のとき ある処理を実行
elif つぎに ならば
次の条件式が成り立つ(真true)のとき ある処理を実行
else でなければ
成り立たない時(偽false)のとき ある処理を実行
実行例1 飲み物選択
実行の手順
1プログラムがやや長いのとインデントの処理のため、まずIDLEの統合環境でNEW
TEXTの画面でにコードを書く
2python25のファイルに’iftest.py’という名前で保存する
3.pythoIDLEで、Fileを openする
4.run mdul5で実行する。
プログラム
print '飲み物を選んでください' print '1 コーヒー 2オレンジジュース 3 ウーロン茶' i=input ('品番を半角英数で入力してください>') if i==1 : print 'コーヒー' elif i==2 : print 'オレンジジュース' elif i==3 : print 'ウーロン茶' else : print 'ありません'
実行
飲み物を選んでください 1 コーヒー 2オレンジジュース 3 ウーロン茶 品番を半角英数で入力してください>5
ありません
>>> 飲み物を選んでください 1 コーヒー 2オレンジジュース 3 ウーロン茶 品番を半角英数で入力してください>1
コーヒー
実行例2 暗証番号
プログラム コード
print '暗証番号を入力してください' i=input('暗証番号>') if i=='tt930' : print '金庫が開きました' else : print '番号が違います。' print 'もう一度入力してください。' i=input('暗証番号>') if i=='tt930' : print '金庫が開きました' else : print '番号が違います。' print 'もう一度入力してください。' if i=='tt930 ': print '金庫が開きました' else : print '番号が違います。'
実行
暗証番号を入力してください
暗証番号>'tt930'
金庫が開きました
暗証番号>'ttr930'
番号が違います。
もう一度入力してください。
>>> print '君の名前は?' (クリス・パイン・プログラミング)
君の名前は?
>>> name = raw_input ('>')
>Tobari ユーザの入力。
>>> if name == 'Tobari' : == 同等の演算子 真のとき print name + '君 ようこそ!' 字下げがされています。 Tobari君 ようこそ!
分岐:ifのあとに来るものがtrueならprintを実行。falseなら実行しない。
Python comand lineを起動して次のコードを実行(黒い画面)
print 'I am God say your name ' name = raw_input('>') Tobari if name =='Tobari' : print 'good name . wonderful future' nameがtrueのとき実行する文
else : print 'I must go . good by' nameが偽falseのとき実行する文
else :でなければの意味:条件に合わない場合
(3)分岐その2 (クリス・パイン・プログラミング)
英語の名前の綴りを話題にして、英語では名前は大文字で始まる
name =raw_input('>') 変数nameに名前を入力させる。 >tobari tobariと入力した。 tobari 入力結果 if name==name . capitalize() : capitalize()変数nameの最初の1 文字目を大 文字にする。Tobariにする。 先ほどの入力tobariと同等かど うかチエックする。
print 'ok' 同等であればokと出力する、 else : でなければ print 'you know spelling of your name ??'
print ' hello wellcome to my 7th English langage course . '
print ”' my name is Mrs Gvard . what's your name....? "
name = raw_input ('>') >tobari 入力する
if name ==name.capitalize() : print ' yes . sit down ' + name + ' . ' 上記が真の場合の出力 sit down Ttobari else : 上記が偽の場合の処理 print name + ' eh , ' + name.capitalize() + ' do yue mean .' tobari eh . Tobari do you mean tobariと誤って答えた場合の出力 ( tobari えっ Tobari ) print ' do you know spelling of your name ?? ' do you know spelling of your name ?? (あなたの名前のスペリングを知っているの?? ) 英語では名前の最初の1文 字は大文字で書く。
(4)ループ とは ループ :ある事象が発生する(待ち条件)まで繰り返す
>>> while True : 変数strがbyeでない条件を満たしている間繰り 返す。 str=raw_input('>') print str ユーザの入力を出力する。 if str =='bye' : bye(待ち条件)を入力すると break 終わる。brseak文によって。
>'今日は' 待ち条件が来るまで繰返す。
'今日は'
>'良いお天気ですね' 自由(任意)な入力
'良いお天気ですね'
>'なんて素敵なんでしょう' 自由(任意)な入力
'なんて素敵なんでしょう’
>bye 待ち条件を入力する。
ループを抜け出してブロックを終了。 >>>
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
>>> for i in range(1,6): 二つのパラメータ 一つ目初期値二つ目その値を越える前に ループが終わる print i,
1 2 3 4 5
>>> for i in range(1,12,2): 三つのパラメータ 三つ目はループするごとにカウンタに加える値 の増分 print i,
1 3 5 7 9 11
>>> range(5) range()はpythonのリストを生成する [0, 1, 2, 3, 4] >>> range(3,8) [3, 4, 5, 6, 7] >>> range(2,8,2) [2, 4, 6]
>>> for i in (3,2,5,7,1): range()を使わないで、直接指定したリストを使う print i**3
27 8 125 343 1
>>> for i in 'python pp': 文字列もリストとして扱い、繰り返し条件になる print i
p y t h o n p p (5)論理を少し(クリス・パイン・プログラミング
分岐その1のテーマを少し考える
名前がChrisでなくても、good name と出力するように直す。
(A) print 'hello , what is your name ? ' name = raw_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_chris =True
>>> I_am_purple =False
>>> I_like_beer =True
>>> I_eat_rocks =False
>>> print I_am_chris and I_like_beer True >>> print I_like_beer and I_eat_rocks False >>> print I_am_purple and I_like_beer False >>> print I_am_purple and I_eat_rocks False >>> print i_am_chris or I_like_beer True >>> print I_like_beer or I_eat_rodks True >>> print I_am_purple or I_like_beer True >>> print I_am_purple or I_eat_rocks False >>> print not I_am_purple True >>> print I_am_chris True >>> print not I_am_chris False 論理演算子には、論理積を表す "and"、論理和を表す "or"、否定を表す "not" などがある。 論理和 and 両方とも真Trueならば結果は真True、それ以外の場合の結果は偽Falseであ る。 論理和 or 与えられたいずれか少なくとも一つが真Trueであれば真True.。. 否定 not 否定とは、真と偽を反転する論理演算である。否定は英語でNotである。 (c) 繰り返し
選択処理のための文 if文
10人の点数を入力して60点以上を合格とする。合格・不合格の数を計算する。
>>> gokaku = 0 変数の初期化 >>> fugokaku = 0 >>> i = 0 >>> for i in range(10) : 繰り返し回数 tensu = input("点数>)" ユーザ入力を促す if tensu < 60 : 条件分岐 fugokaku += 1 連続和 if tensu >= 60 : gokaku += 1 >54 ユーザ入力 >67 >78 >98 >45 >78 >36 >70 >59 >60 >>> print gokaku 結果出力 6 >>> print fugokaku 4
複合条件による分類 and「かつ、また」論理演算
点数90以上A、90未満80以上A、80未満70以上B。 70未満60以上C、60未満Dとして、採点結果を分類 して、AA、A、B、C、Dの各ランクの人数を出力する。
>>>aa = 0 初期値入力 >>>a = 0 >>>b = 0 >>>c = 0 >>>d = 0 >>>tensu = 0 >>>i = 0 >>> for i in range(20) : 繰り返し回数 >>> tensu = input('点数>') 点数ユーザ入力 >>>if tensu >= 90 : 判定 >>> aa += 1 AA分類に加算 >>>if tensu < 90 and tensu >= 80 : and条件 >>> a += 1 A条件に加算 >>> if tensu < 80 and tensu >= 70 : >>> b += 1 >>> if tensu < 70 and tensu >= 60 : >>> c += 1 >>> if tensu < 60 : >>> d += 1 点数>58 ユーザ入力 点数>96 点数>78 点数>85 点数>65 点数>78 点数>36 点数>81 点数>96 点数>74 点数>68 点数>69 点数>58 点数>70 点数>69 点数>71 点数>58 点数>55 点数>85 点数>96 >>> print ' AA = ' , aa 結果出力 AA = 3 >>> print ' A = ' , a A = 3 >>> print ' B = ' , b B = 5 >>> print ' C = ' , c C = 4 >>> print ' D = ' , d D = 1
>>> for x in range(10): if x % 2==0: print x ,'is even' else: print x , 'is odd'
0 is even 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
year = 1950 if year >=1989: print year,'=HEISEI',year-1989,' nen' elif year>=1926: print year,'SHOWA ',year-1925,' nen' 1950 SHOWA 25 nen
(6) すべてがうまく理解してきているかどうかを確かめるために、もう一つ例を見てみましょう。(クリス・パイン・プログラミング
>>> while reqest != 'bye' : print 'C君になにをしてもらいたいですか?' reqest = raw_input('>') print '” C君、' + reqest + 'してね。”とあなたは言います。' print 'C君の返答' print 'Cは ' + reqest + 'する。” ' print 'Papa も' + reqest + 'する。”。' print 'Mama も' + reqest + 'する。”。' print 'Python も' + reqest + 'する。”。' print 'Nono も' + reqest + 'する。”。' print 'Emma も' + reqest + 'する。” ' C君になにをしてもらいたいですか? >'ごはん' ” C君、'ごはん'してね。”とあなたは言います。 C君の返答 Cは 'ごはん'する。” Papa も'ごはん'する。”。 Mama も'ごはん'する。”。 Python も'ごはん'する。”。 Nono も'ごはん'する。”。 Emma も'ごはん'する。” C君になにをしてもらいたいですか? >'うんち' ” C君、'うんち'してね。”とあなたは言います。 C君の返答 Cは 'うんち'する。” Papa も'うんち'する。”。 Mama も'うんち'する。”。 Python も'うんち'する。”。 Nono も'うんち'する。”。 Emma も'うんち'する。” C君になにをしてもらいたいですか? >'しづかに' ” C君、'しづかに'してね。”とあなたは言います。 C君の返答 Cは 'しづかに'する。” Papa も'しづかに'する。”。 Mama も'しづかに'する。”。 Python も'しづかに'する。”。 Nono も'しづかに'する。”。 Emma も'しづかに'する。” C君になにをしてもらいたいですか? >'ひるね' ” C君、'ひるね'してね。”とあなたは言います。 C君の返答 Cは 'ひるね'する。” Papa も'ひるね'する。”。 Mama も'ひるね'する。”。 Python も'ひるね'する。”。 Nono も'ひるね'する。”。 Emma も'ひるね'する。” C君になにをしてもらいたいですか? >'bye' ” C君、'bye'してね。”とあなたは言います。 C君の返答 Cは 'bye'する。” Papa も'bye'する。”。 Mama も'bye'する。”。 Python も'bye'する。”。 Nono も'bye'する。”。 Emma も'bye'する。” C君になにをしてもらいたいですか?
(7)for文の基本
まずrange()関数の理解
range(x,y,step):xからy−1までの連続する整数から、アイテム間の間
隔がstepであるリストを作成して返す。
>>> range(13) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] >>> range(3,13) [3, 4, 5, 6, 7, 8, 9, 10, 11, 12] >>> range(3,13,4) [3, 7, 11] >>> y =['a,b,c','d,e,f','g,h,i'] >>> len(y) 3
for文の基本形は
1.for i in range(10) ; 0からある数までたどりながら
print i
2..for i in range(len(a)) : あるリストのすべての要素をたどりながら
print a[1]
3.for i in a :
print i
>>> ss= "" >>> for c in "ABC": ss = c + ss print ss
A BA CBA >>> for c in "ABC": ss = c + ss print ss
ACBA BACBA CBACBA
>> 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) if...elif...else構造
>>> def describ(inhabitant): メソッド内にラップされたif文 if inhabitant =='sophie': print 'gender :female' print 'height :145' elif inhabitant =='paul': print 'gender :male' print 'height : 145' elif inhabitant =='dawn': print 'gender: female' print 'height: 170' elif inhabitant =='brian': print 'gender:male' print 'height : 180' else : print 'species: Trachemys scripts elegants' print 'heght : 6'
>>> describ('paul') メソッドの機能 gender :male height : 145 >>>
(9)配列を使った一般的例
>>> names=['awk','perl','python','ruby']
>>> for name in names : print name,"\n"
awk
perl
python
ruby
(10)while文
>>> i=1 >>> while i<3: 1との比較をおこなう print i,"\n" i+=1 iが3より小さいとき実行 iが3より大きいとき抜ける
1
2
>>> a=1.0 >>> while a<=10: 条件式を書く。値が真の間ループが回る。 print a a+=2
1.0 3.0 5.0 7.0 9.0
>>> sum=0 >>> i=1 >>> while i<=5: iについての条件 sum +=i i +=1 iの値も増やす print sum ,"\n"
1
3
6
10
15
>>> x= 1 >>> while x <100: print x x= 2*x
1 2 4 8 16 32 64 >>>
(11)練習問題1草野心平の詩「おれも眠ろう」を書きだすプログラムを書いてみましょう。 (おれも眠ろう 草野心平)
るるり りりり るるり りりり るるり りりり るるり るるり りりり るるり るるり るるり りりり 練習問題2 詩人 山村暮鳥の「風景」 の詩を書きだすプログラムを作ってみましょう。
いちめんのなのはな
いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな かすかなるむぎぶえ いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな ひばりのおしやべり いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな いちめんのなのはな やめるはひるのつき いちめんのなのはな。°
問題3 犬語で伝えよう 家の愛犬ポチは犬語で話すとワンと答えます。犬語はすべて大文字です。 大文字以外はウウとうなるだけです。 貴方が犬語でバイバイと3回繰り返していうまで、犬から離れられません。 ポチとの会話のプログラムをつくりましょう。 raw_input()
(12)まとめ
件判断とは何か (高橋たのしいruby) 較演算子・真偽値・論理演算子
条件判断の種類、書き方・使い方
繰り返しとは何か ある回数行いたい 配列の内容を別のオブジェクトに入れ替えたい ある条件が成立するまで繰り返したい
繰り返し注意点 何を繰り返すのか 繰り返しをやる条件は何か
繰り返しの種類と書き方 構文を利用する for while メソッドで実現する
ホーム 戻る |