プログラミング入門

関数を使って星座は判定をしよう

この章では関数で星座の判定を作成します。 この例は星座の判定を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に入ります。 結果は以下の通りです。