問題
月の数字monthが入力されたとき、month月の日数が31日であれば、「○月はlong」と表示し、30日以下であれば「○月はshort」と表示するプログラムを書いてください。
ただし、月の数字は1以上12以下の整数であり、それ以外の整数が入力されたときは「○月はinvalid」と表示すること。整数とならない入力は与えないこととする。
なお、入出力の部分は提示したものを使用し、それを変更してはならない。
入出力の部分のコード
month = input('月: ')
### BEGIN ###
### END ###
print(f'{month}月は{message}')
解答
解説
解答例を2つ挙げましたが、解説ポイントはそれぞれ1つずつで、
in
演算子- Calendar モジュール
の2点です。
in 演算子
解答例1では if
文の条件式に in
演算子を使用しています。
今回の問題は1月〜12月の各月の日数が31日か、30日以下かを判定するものになっています。
それぞれに該当する月をリストに格納し、入力された月がリストに含まれるかどうかを in
演算子を使用して判定するようにしています。
値 in リスト
という形式でリストの中に値が含まれているかどうかを判定することができます。
含まれていれば True
、含まれていなければFalse
が返ってきます。
sample_list = [1, 3, 5, 7, 9]
print(5 in sample_list)
# True
print(4 in sample_list)
# False
in
の前にnot
を付けることで、含まれていたらFalse
、含まれていなかったらTrue
とすることもできます。
sample_list = [1, 3, 5, 7, 9]
print(5 not in sample_list)
# False
print(4 not in sample_list)
# True
Calendar モジュール
解答例2は Calendar モジュールを使用しています。
Calendar モジュールは標準ライブラリの1つなので、pip 等によるインストールは不要です。
今回は Calendar モジュールのmonthrange()
関数を使用しています。
monthrange()
関数は引数に年(西暦)、月を指定し、その月の1日の曜日と、その月の日数をタプル形式で返します。
import calendar
print(calendar.monthrange(2022, 6))
# (2, 30)
上記のように2022年6月を指定すると、(2, 30)
と返ってきます。
曜日は 月曜日が 0、火曜日が 1、 ・・・、日曜日が という形式になっていて、2022年6月1日は水曜日なので、1つ目の要素は「2」になっています。
そして、6月は30日までなので2つ目の要素は「30」になっています。
解答例2ではmonthrange()
関数の返り値の2つ目の要素を利用しています。
monthrange()
関数以外にも、Calendar モジュールは色々な関数やクラスを持っているので、公式ドキュメントなどを参照してみてください。
Google Colaboratory
本記事に掲載しているコードは Google Colaboratory で動作を確認しています。
下記からアクセスして、ご自身のGoogleドライブにコピーしていただければ、すぐに実行できます。
環境構築の不要な Google が提供している Webサービスなので、Python を学習中の方にはオススメです。
おわりに
本ブログでは、今後も具体的な問題・課題の解説記事を増やしていきたいと考えています。
解説して欲しい問題・課題がありましたら、ぜひ、お問い合わせフォームからご連絡ください。
以上です。
コメント