この章では自動計算プログラムを作ります。このプログラムではリスト、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回ループして、その都度答え合わせをします。
最後に以下の箇所で出力をして、終わりになります。
タグ: if
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などの数値が入力されれば以下のように「間違い」が出力されます。
この章ではif文を使用して、占いプログラムを作ります。
では例をみてみましょう。 randint関数については説明済みですが、もう一度復習します。
この中にという記述がありますが、これは乱数を生成するrandint関数を使っています。
この記述で0から6までの整数値をランダムに生成します。
他にものように使用すると、2から12までの整数値をランダムに生 成します。
このrandint関数を使用するためにはrandomモジュールと言うファイルを取り入れなくてはいけません。
このモジュールを取り入れるにはという記述が必要です。
モジュールと言うのは機能ごとに分かれているファイルです。
例えばrandomモジュールにはrandint関数の他にもrandom関数がありますが、この関数は0.0から1.0までの小数点を含んだ値を返します。
randomモジュールにはこのように機能が似た関数が複数あり、1つのモジュールとしてまとまっています。
ではプログラムの説明に入ります。
answerには0から6までの整数値が入っているので、例えば0が入っているとするとになるので、の箇所はtrueになります。
結果、「大吉です」が出力されます。
結果は次の通り、毎回違う占い結果が出力されます。
条件分岐ifの公式3
この章でもif文について説明します。
「条件分岐ifの公式2」の応用で、条件式が複数ある場合、つまり細かい条件を設定したい場合にはelifを使います。
今までのif文は条件に合うか合わないかを判断するのみのプログラムでしたが、条件1に合うか、もしくは条件2に合うか、どちらにも合わないか、と言うような条件の複数指定の場合にはelifを使います。
具体的には、以下の構文になります。 else以下は省略できますが、省略した例は「if文で占いを作ろう」に載せています。
では例をみてみましょう。 numは1なのでとの条件式はfalseです。
結果、else以下のが実行されます。
条件分岐ifの公式2
条件分岐ifの公式1
この章ではif文について説明します。
条件分岐とは例えば生活の場面で、もし、今日財布にお金が10000円あったらフランス料理にして、20000円あったら中華料理にすると皆さん判断していますが、プログラムでもこのような表現が出来る機能が備わっています。
このことを条件分岐と言います。 〇 ifは英語のifと同じで「もしも」という意味です。
〇条件式は条件を満たしていればtrueを返し、条件を満たしていないのならばfalseを返します。
trueとfalseについては後ほど説明しますが、ここでは条件式が条件を満たしていればif文が実行され、条件を満たしていなければif文は実行されないとだけ覚えておいてください。
〇条件式はとかなどの表現をやのような記号を使って表現します。
ではif文の構造について説明します。 「if 条件式:」の部分をヘッダ行と言います。
条件式の終わりには「:」を付けます。
ヘッダ行から下がステートメントブロックと呼ばれています。
ステートメントブロック内の文が複数ある場合はインデントを揃えてください。
次のようにインデントがずれているとエラーになります。 インデントを揃えるのはif文だけではなく、この章以降に説明するfor文やwhile文でも共通した規則なので覚えておいてください。
条件式はとかなどの表現を「>」や「<」のような記号を使って表現しますと説明しましたが、これらの記号を関係演算子と言います。
関係演算子は「>」や「<」の他にもあります。 ではここからは何がtrueで何がfalseか見てみましょう。 numは1より大きく、条件を満たしているので、trueになります。
このように条件を満たしていることをtrueと言います。
もっと正確に言うと、条件式は条件を満たしていればtrueになり、ブロックの中が実行され、条件を満たしていないならばfalseになり、その文は実行されません。
結果は以下の通りです。 以下のようにインデントが揃っていないとエラーになります。 結果はインデントエラーが出力されます。
次は文字列の比較をしてみましょう。 nameの値と条件式のは等しく、trueなので、「実行されました」が出力されます。
次はfalseの例を見てみましょう。 結果は何も表示されません。
なぜなら「num<1」の条件式が条件を満たしていないからです。
つまりfalseになり,ブロックの中は実行されません。
次の例を見てみましょう。 =>nameの値と条件式のは等しくないので、trueとなり、「実行されました」が出力されます。
関係演算子「!」の意味を確認してください。 関係演算子を使わなくても、条件式は書くことが出来るので、次の例で説明します。 これまでは関係演算子を使って、2つのデータの比較を行っていましたが、それだけではなくて、変数やリストやディクショナリなどに何かデータが入っているかどうかをif文を使って、確認することができます。
この例では変数aには5と言う数値が入っているので条件式がtrueになり、「trueです」が出力されます。
つまり、何かデータが入っていればtrueです。
次はfalseの例を見てみましょう。 この例は条件式がfalseなので何も実行されません。
次の例に進みます。
についてはtrue や falseを返すと説明しましたが、これらはif文と組み合わせて使われることが多いです。
結果は次の通りです。
星座判定メソッドを作ろう
この章では配列、if文、メソッドを使用して、星座判定システムを作成します。 =>getsメソッドはユーザーがキーボードから入力した文字列を返します。
そして、その文字列をで整数に変換します。前の章では自身でメソッドを作ってきましたが、getsメソッドなどはRubyであらかじめ機能が定義されているメソッドです。
つまり、このメソッドはユーザーが入力した文字列を整数値に変換するのですが、例え数字で入力したとしても、入力値は文字列として入力されるので、これを整数値に変換するのがです。
これらの2つのメソッドを「.」で繋ぎます。
このプログラムでは2か所ユーザー入力の箇所がありますが、それらがbirthmonthとbirthdayに代入されています。 この配列内は山羊座から順番通りに並んでいますので、決してランダムに並んでいるわけではありません。
day1には各星座の月の末日を配列に入れています。
day2には1月から12月までの末日を配列に入れています。 =>例えばmonthに1が入り、dayに19が入っているとします。
そうするとの部分でcountが0の時にifの条件式がtrueになりますので、入れ子のif文の条件式の判定に入ります。
このようにif文は入れ子にすることが出来ます。
つまり、初めのif文がtrueの場合に次のif文でさらに条件式を判定します。 「day <= day1[count]」の中の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になります。
結果、names[1]となり、みずがめ座が入ることになります。
ではさらに、以下の箇所の詳しい説明をします。 「count + 1」の箇所の説明をしますと例えばmonthが1で、day が23の場合にはがになりfalseになるので、elsifのブロックに入りますが、1月は やぎ座とみずがめ座しかなく、やぎ座ではないのならばみずがめ座しかないのでnames配列を1つ進めるためにで1を足しています。
names.lengthを使っている理由は例えば の中のcountに11が入るとの箇所が12になりますが、の箇所が無いと仮定するととなってしまいますが、実際にという要素はありません。
そこでで余りを0(12割る12で余り0)にして山羊座が出るように設計しています。
つまり、該当する以下の余りの数字がnames配列の添え字になり、その該当するデータがnameに入ります。 最後にreturnで返ってきたnamesの値がjuに入り、printで出力します。
結果は以下の通りです。
if文で占いを作ろう
この章では今まで説明してきたif文と配列を使って、占いプログラムを作ります。
では例をみてみましょう。 resultは大吉から大凶までの要素を持つ配列になっています。
answerには0から6までのランダムな数が入ります。
ランダムな数を得るにはrandメソッドを使います(メソッドの意味については「メソッドについて知ろう」の章で説明します)。 整数値を入力した場合には0からまでの乱数値を生成します。
0もしくは何も入力しない場合は0以上 1未満の乱数値を生成します。
この例のrand(7)であれば0から6までの乱数値を生成します(7までではありません)。
rand(6)+1であれば1から6までの乱数値を生成します。
乱数を得た後はif文で判定を行います。
例えば乱数が0であればという条件式になるので、「大吉です」が出力されます。
結果は以下の通り、毎回違う値が出力されます。 これをcase..when文で書き換えると以下のようになります(先頭の2行は省略)。
if文で星座判定をしよう
この章ではif文で星座判定プログラムを作成します。
少し長いプログラムですが、if文が繋がっているだけです。
では例をみてみましょう。 このプログラムではユーザーに誕生日の月と日を入力させて、その結果を表示するプログラムです。
では先頭から説明をしていきます。
ユーザーに文字を入力させるにはgetsメソッドを使います(メソッドについては「メソッドについて知ろう」で説明します)。
getsメソッドはユーザーがキーボードから入力した文字列を返します。
文字列を返すので、これを整数値に変換しないとif文の判定ができません。
そこでさらにを使います。
入力値は文字列として入力されるので、これを整数値に変換するのがです。
この章はif文の入れ子を説明するために用意したので、これらのメソッドについては「星座判定メソッドを作ろう」「stringクラスについて知ろう」で詳しく説明します。
これらのメソッドで行うことは以下の赤枠の箇所の入力です。
入力するまでプログラムの実行は止まりますので、入力をしてエンターキーを押すと次に進みます。 では次に進みます。
このプログラムのif文の入れ子を使ってます。
つまり、if文の中にif文が入っている構造です。 例えばmonthに1が入っているとします。
そうすると上のif文のがtrueになりますので、さらに入れ子のif文の判定に入ります。
1月ですと、山羊座と水瓶座の2つの星座がありますので、という形式でif文の入れ子の条件式を作成します。
そして、dayの値が31を超えると「間違い」が出力されます。
まとめますと、入れ子のif文とは始めのif文の条件式にマッチしたものに対して、さらに条件を絞りたい場合に使われます。
つまり、1月という初めの条件式にマッチしたら、さらに山羊座か水瓶座を調べたいので、if文の入れ子を使っています。