ホーム     戻る

第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 ウーロン茶
品番を半角英数で入力してください>


コーヒー

実行例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 (クリス・パイン・プログラミング)

英語の名前の綴りを話題にして、英語では名前は大文字で始まる

 n
ame =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
>>>  forin 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
=  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 
   メソッドで実現する


ホーム     戻る