満月の夜の息抜き

誰かに話す必要がないことたち。

Pythonふりがなプログラミング2

条件分岐ってどんなもの?

  • 「◯◯だったら、ペケペケする」

条件分岐のために覚える必要があるのは、Trueとfalse。

これらは文字列や数値と同じ「値」の一種で、ブール値と呼ぶ。

条件をチェックした結果を表す値。

Trueかfalseを返すMethod

  • '文字列'.isdigit()
  • age < 20
  • if式や関数:

入力されたものが数値かどうか調べる

isdigitメソッド

  • 文字列の中身が0〜9の数字だけの場合はTrue、そうでない場合はfalseを返す
  • isdigitメソッドは引数を受け取らないので、メソッド名のあとにカッコだけを書く

読み下し文1

  • 文字列は数字のみか?
  • '文字列'.isdigit()

読み下し文2

  • 文字列「入力せよ」を表示してユーザーに入力させ、結果を変数textに入れろ
  • 変数textは数字のみかを表示しろ
  • text = input('入力せよ')
  • print( text.indigit() )

数値が入力されたら計算する

if文の書き方を覚えよう

ifのあとに書いた式や関数などの結果がTrueだったら、その次の字下げされている部分に進む

  • if 式や関数など:
  •     実行する処理

if文では実行する処理の行頭を字下げして、if文の対象であることを示します。この字下げをインデントという

Pythonの場合は、半角スペース4つ分の字下げをする

IDLEエディタではタブを1回押すと自動的に4文字分の半角スペースが入る

文字列が数字だったらメッセージを表示する

読み下し文3

  • 文字列「入力せよ」を表示してユーザーに入力させ、結果を変数textに入れろ
  • もしも「変数textが数字のみ」がTrueなら、以下を実行せよ
  •     文字列「数字です」を表示しろ
  • text=input('入力せよ')
  • if text.isdigit():
  •     print('数字です')

数字のときは計算する

読み下し文4

  • 文字列「入力せよ」を表示してユーザーに入力させ、結果を変数textに入れろ
  • もしも「変数textが数字のみ」がTrueなら、以下を実行せよ
  •     文字列を整数化して1.08を掛けた結果を表示しろ
  • text=input('入力せよ')
  • if text.isdigit():
  •     print( int(text)*1.08)

インデントとブロック

同じようにインデントすれば「実行する処理」を増やすことができる。

このインデントした範囲をブロックと呼ぶ。

行頭のスペースを削除してインデントしていない状態にすると、ブロックから出たことになる、その部分はif文とは関係なくなるので、Trueのときでもfalseのときでも常に実行される

 数値が入力されていないときに警告する

 else節の書き方を覚えよう

  • もしも「式や関数など」が真なら以下を実行せよ
  •     実行する処理1
  • そうでなければ以下を実行せよ
  •     実行する処理2
  • if 式や関数など:
  •     実行する処理1
  • else:
  •     実行する処理2

else節を追加してみよう

読み下し文5

  • 文字列「入力せよ」を表示してユーザーに入力させ、結果を変数textに入れろ
  • もしも「変数textは数字のみ」が真なら以下を実行せよ
  •     変数textを整数化して数値1.08を掛けた結果を表示しろ
  • そうでなければ以下を実行せよ
  •     文字列「数字ではない」を表示しろ
  • text = input('入力せよ')
  • if text.isdigit():
  •     print( int(text)*1.08)
  • else:
  •     print('数字ではない')

全角のアラビア数字だったら、isdigitメソッドはTrueを返す

プログラムを直接読む場合、意味がわからないときは変数に実際の値を当てはめてみると理解できることがある

比較演算子で大小を判定する 

数学の不等式は解を求めるため、プログラムの比較演算子は、計算の演算子と同じように結果を出すための命令

結果はTrueとfalse

読み下し文6

  • 数値4は数値5より小さいの結果を表示しろ
  • print( 4 < 5 )  True

読み下し文7

  • 数値6は数値5より小さいの結果を表示しろ
  • print ( 6 < 5) false

比較演算子の左右のどちらか、または両方が変数だったら変数に入れた数値によって結果が変わる

if文と比較する式を組み合わせる

読み下し文8

  • 文字列「年齢は?」を表示してユーザーに入力させ、結果を変数textに入れろ
  • 変数textを整数化して変数ageに入れろ
  • もしも「変数ageは数値20より小さい」が真なら以下を実行せよ
  •     文字列「未成年」を表示しろ
  • text = input('年齢は?')
  • age = int(text)
  • if age < 20 :
  •     print('未成年') 

文字列を比較する

よく使われるのは、

  • 等しいときにTrueを返す「==」
  • 等しくないときにTrueを返す「!=」
  • 'apple' == 'apple'  true
  • 'apple' == 'orange' false
  • 'apple' != 'apple' false
  • 'apple' != 'orange' true

3段階以上に分岐させる

elifの書き方を覚えよう

if文にelif(エルイフ)節を追加すると、if文に複数の条件をもたせることができる

else節はすべての条件を満たさなかったときに実行される

読み下し文9

  • 文字列「年齢は?」を表示してユーザーに入力させ、結果を変数textに入れろ
  • 変数textを整数化して変数ageに入れろ
  • もしも「変数ageは数値20より小さい」が真なら以下を実行せよ
  •     文字列「未成年」を表示しろ
  • そうではなく「変数ageは数値65より小さい」が真なら以下を実行せよ
  •     文字列「成人」を表示しろ
  • そうでなければ以下を実行せよ
  •     文字列「高齢者」を表示しろ
  • text = input('年齢は?')
  • age = int(text)
  • if age < 20 :
  •     print('未成年') 
  • elif age < 65:
  •    print('成人')
  • else :
  •    print('高齢者')

条件分岐の中に条件分岐を書く

年齢層を判定する前に、エラーが出ないように数字のみのチェックをする

2つのif文を組み合わせる

読み下し文10

  • 文字列「年齢は?」を表示してユーザーに入力させ、結果を変数textに入れろ
  • もしも「変数textは数字のみ」が真なら以下を実行せよ
  •     変数textを整数化して変数ageに入れろ
  • もしも「変数ageは数値20より小さい」が真なら以下を実行せよ
  •     文字列「未成年」を表示しろ
  • text = input('年齢は?')
  • if text.isdigit():
  •     age = int(text)
  •     if age < 20:
  •         print('未成年')

複数の比較式を組み合わせる 

6〜15歳だけを判定するとき、2つの数値の範囲内にあることを判定したいときは、ブール演算子を利用する

ブール演算子の書き方を覚えよう

ブール演算子とは、ブール値を受け取って結果を返す演算子

and、or、notの3種類がある

and演算子は左右の値が両方共TrueのときだけTrueを返す

左右の値が比較演算子を使った式なら、比較演算子はTrueかfalseを返すので、2つの式が同時にTrueを返したときだけ、and演算子の結果もTrueになる

読み下し文11

  • 文字列「年齢は?」を表示してユーザーに入力させ、結果を変数textに入れろ
  • 変数textを整数化して変数ageに入れろ
  • もしも「変数ageが数値6以上、かつ変数ageが数値15以下」が真なら以下を実行せよ
  • 文字列「義務教育の対象」を表示しろ
  • text = input('年齢は?')
  • age = int(text)
  • if age >= 6 and age <= 15 :
  •     print('義務教育の対象')

読み下し文12

  • 文字列「年齢は?」を表示してユーザーに入力させ、結果を変数textに入れろ
  • 変数textを整数化して変数ageに入れろ
  • もしも「変数ageが5以下、または変数ageが65以上」が真なら以下を実行せよ
  •     文字列「幼児と高齢者」を表示しろ
  • text = input('年齢は?')
  • age = int(text)
  • if age <= 5 or age >=65 :
  •     print('幼児と高齢者')

not演算子を使ってFalseのときだけ実行する 

読み下し文13

  • 文字列「年齢は?」を表示してユーザーに入力させ、結果を変数textに入れろ
  • もしも「変数textは数字のみではない」が真なら以下を実行せよ
  •     文字列「数値を入力して」を表示しろ
  • text = input('年齢は?')
  • if not text.isdigit():
  •     print('数値を入力して')

not演算子は左側に値を置くことができない。値を1つしか持てない単項演算子という。not演算子以外では、負の数を表すために使う「-」も単項演算子

 年齢層を分析するプログラムを作ってみよう

数字のみ判定のブロック内に3段階の判定を書く

読み下し文14

  • 文字列「年齢は?」を表示してユーザーに入力させ、結果を変数textに入れろ
  • もしも「変数textは数字のみ」が真なら以下を実行せよ
  •     変数textを整数化して変数ageに入れろ
  •     もしも「変数ageは数値20より小さい」が真なら以下を実行せよ
  •         文字列「未成年」を表示しろ
  •     そうではなく「変数ageは数値65より小さい」が真なら以下を実行せよ
  •         文字列「成人」を表示しろ
  •     そうでなければ以下を実行せよ
  •         文字列「高齢者」を表示しろ
  • text = input('年齢は?')
  • if text.isdigit() :
  •     age = int(text)
  •     if age < 20 :
  •         print('未成年')
  •     elif age < 65 :
  •         print('成人')
  •     else :
  •         print('高齢者')

エラーメッセージ2

インデントのエラー

  • 1つのインデントされたブロックを予期する

IndentationError: expected an

indented block

 インデントが必要なところでインデントしていない

  • 予期しないインデント

IndentationError: unexpected indent

インデントする必要がないところでインデントしている

バリューエラー

対応できないデータ型が関数に渡されたときに発生

  • 引数baseが10のint関数に対して不正なリテラル:文字列「aaa」

ValueError: invalid literal for

int() with base 10: 'aaa' 

10進法で変換するint関数に対応できないデータ型は渡されている「aaa」

ifのあとのスペースを忘れた場合

  • 不正な文法

SyntaxError: invalid syntax

 たとえば、ifと直後の変数の間を半角スペースで区切らずにifageと書いた場合