この章では関数で星座の判定を作成します。 この例は星座の判定をjudge関数に任せています。
このように判定の部分を関数で作成することでコンパクトになり、プログラムがすっきりします。
では説明を始めます。
ここでユーザーにデータを入力させます。
ユーザーに入力をさせる関数はraw_input関数です。
「文字列」には画面に表示させたい文字列を入力します。
ここでユーザーが入力をするとその結果は文字列として変数に入ります。
の中のbirthmonthのデータがjudgeメソッドの仮引数monthに入り、birthdayのデータがdayに入ります。
ここでmonthとdayを整数値に変換するためにint関数でキャストしています。
つまり、raw_input関数は文字列を返すので、ここでint関数で整数に変換します。
namesでは星座名をリストで作成しています。
この配列内は山羊座から順番通りに並んでいます。
決して、ランダムに並んでいるわけではありません。
day1には各星座の月の末日をリストに入れています。
day2には1月から12月までの末日をリストに入れています。
例えば仮引数のmonthに1が入り、dayに19が入っているとします。
の部分ではcountが0の時にifの条件式trueになりますので、入れ子のif文の条件式の判定に入ります。
if文はこのように入れ子にすることができます。
つまり、初めのif文がtrueであればさらに入れ子のif文の条件判定に入ります。 の中のdayには19が入り、1周目のにはday1の0番目の要素である19が入っていますので、条件式はtrueになり、nameにはnamesの0番目の要素である「やぎ座」が入ります。
例えばdayに19ではなく23が入っていると仮定するとはfalseになるので、の条件式の判定に入ります。
ここでday2[count]にはday2の0番目の要素である31が入っていますので trueになり、name にはに該当する星座が入ります。
のcountには1周目では0が入っていますのでで余りを求めると1になりますのでになり、「みずがめ座」が入ることになります。
ではの詳しい説明をします。
「count + 1」をする理由は例えばmonthが1で、day が23の場合にはがになりfalseになるので、elifのブロックに入りますが、1月は やぎ座と水瓶座しかなく、やぎ座ではないのならば水瓶座しかないのでnamesを1つ進めるためにで1を足しています。
len(names) を記述している理由は例えばの中のcountに11が入るとの箇所が12になりますが、の箇所が無いと仮定するととなってしまいますが、実際にという要素はありません。
ですので、の箇所で余りを0(12割る12で余り0)にして山羊座が出るようにしています。
つまり、該当する以下の余りの数字がnames配列の添え字になり、その該当するデータがnameに入ります。 結果は以下の通りです。
タグ: raw_input
自動計算プログラムを作ろう
この章では自動計算プログラムを作ります。このプログラムではリスト、while、if文が出てきますので、これらの使い方のイメージを掴んでください。 このプログラムでは5問の計算を行うプログラムです。
最後に5問中いくつ正解したのか正解数を表示して終了になります。
では先頭から説明します。 この箇所ではリストを2つ作成しています。
これらのリストには初めにすべて0が入っていますが、後ほど数値がそれぞれ5つ入ります。
answerは答えを入れるリストで、resultは正解の答えが入っているリストです。
次に以下の箇所の説明をします。 num1とnum2にはそれぞれ0から50までの数値がランダムに入ります。
乱数については説明済みですので、ここでは詳しくは書きません。
次に以下の箇所の説明をします。 ここでは以下の赤枠の箇所の表示を行っています。
while文で5回ループしているので、5回の式が表示されます。 では次の箇所の説明をします。 raw_input関数はユーザーに入力をさせる関数であることは説明済みですが、この関数は文字列として入力されるのでint関数で整数に変換しなくてはいけません。
そして、その入力値は答えになりますので、answerに5回入力していきます。
つまり、whileで5回ループしていますので以下の順番でリストにデータが入っていきます。 以下の箇所では実際の答えがリストとして入力されます。 whileで5回ループしていますので以下の順番でリストにデータが入っていきます。 次に以下の箇所の説明をします。 この箇所では正解数をカウントしています。
rightanwerには正解数が入るのですが、初めに0が入っています。
そしてif文でリスト同士の値を比べて、同じであればrightanswerに1を足します。このif文はwhileの中に入っているので、5回ループして、その都度答え合わせをします。
最後に以下の箇所で出力をして、終わりになります。
breakについて知ろう
この章ではbreakについて説明します。
breakはforやwhileなどと一緒に使います。
forやwhileの中で「ある条件下に達した時」にbreakを使ってforやwhileを抜けることができます。
つまり、現在行っている繰り返し作業を強制的に終了させます。
では例をみてみましょう。 for文のブロックの中にif文が入っています。
このif文の意味は「もし、iが4になったら for文を抜けますよ」と言う意味です。breakはこのように一連の流れを強制的に中止するために使われます。
では一連の流れを見てみましょう。
①初めに1がiに代入され、if文での 判定に入ります。もしiが4になったら、for文を抜けますが、iは1でfalseなので if文は実行されません。
②が実行され、「1つのリンゴ」を出力します。
③ for文の先頭に戻って、2がiに代入され if文での判定に入ります。
もしiが4になったら、for文を抜けますが、iは2でfalseなのでif文は実行されません。
④が実行され、「2つのリンゴ」を出力します。
⑤ for文の先頭に戻って、3がiに代入され if文での判定に入ります。
もしiが4になったら、for文を抜けますが iは3でfalseなのでif文は実行されません。
⑥が実行され、「3つのリンゴ」を出力します。
⑦ for文の先頭に戻って、4がiに代入され if文での判定に入ります。
もしiが4になったら、for文を抜けますが iは4でtrueなのでif文が実行されてbreakが実行されます。
ここでfor文を抜けるので、この後のは実行されません。
⑧ breakで for文を抜けたので、を実行して終了です。
インデントについては以前説明しましたが、もう一度復習します。 上の例は3つの文章に分かれていますので
それぞれの先頭を左端に合わせてください。
次はwhile文の中で、breakを使用する例を紹介します。 このプログラムはユーザーが入力したものに対して足し算を行っています。
「while True:」のように条件式をTrueにすると無限に繰り返しを行います。
この無限の繰り返しはbreakで抜けないと文字通り無限に繰り返しを行います。
raw_input関数はユーザーにキーボードからの入力を促すわけですが、例え数値を入力したとしても、raw_input関数は文字列として入力される仕様なので、文字列を数値に変換してあげないと計算することは出来ません。
そこで、その文字列をint関数でキャストして数値にしてあげることで計算することができるようになります。
if文の条件式のaが1になりましたら、while文を抜ける仕様になっていますので最後に1を入力したら計算が終わりになります。
最後に1が入力されていますが、ここで計算は終わりです。
この1は合計には含まれません。
結果は以下の通りです。
if文で星座を判定しよう
この章ではif文で星座を判定します。このプログラムの中にあるif文は入れ子になっていますので、このif文の入れ子について説明していきます。
長いプログラムですが、if文が連続しているだけです。 では前から説明していきます。 この箇所ではユーザーに誕生日の月と日を入力させています。
つまり、以下の赤枠の箇所のようにユーザーに入力させます。 そのユーザーに入力させるための関数がraw_input関数です。 「文字列」には画面に表示させたい文字列を入力します。この文字列は省略できます。
この関数はユーザーにキーボードからの入力を促すわけですが、例え数値を入力したとしても、文字列として入力されるので、これをint関数で整数に変換します。
int関数については「Pythonで計算をしよう」で説明しました。
整数に変換をしないとif文で判定ができなくなりますので、このプログラムではint関数で変換してください。
次にif文について説明します。 この例では外側のif文でmonthの数値が1から12までのどの数値なのかを確認します。
次に内側のif文で入力させたdayの値により分別をします。
例えば1月は山羊座か水瓶座なので,1月19日までが山羊座で、1月20日からが水瓶座になります。
ですので、入れ子の中の条件式は「and」で連結して、という表現で書きます。
どれにも当てはまらない時には「間違い」が出力されます。
このように内側のif文は外側のif文での条件をさらに絞りたい場合に使用します。
つまり、入力された月は1月なので、さらに入力された日をもとに山羊座か水瓶座のどちらかを調べましょうと言うことです。
補足ですが、以下の赤枠の箇所は月の入力が間違えていた時に出力されますので、外側のif文のelseになります。 月に89などの数値が入力されれば以下のように「間違い」が出力されます。