days_of_month = [
[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
][is_leap_year]
上記のような宣言をしたときに
is_leap_year = 0の時は、[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
is_leap_year = 1の時は、[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
がdays_of_monthに入ります。
感覚的には何となくわかるのですが、いまいちピンとこない状態です。
説明していただける方、どこか参考になるサイト等教えていただけると幸いです。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
何が原因で理解を妨げているのかを分析しましょう。
Python
1i = 0 2foo = [10,20] 3bar = foo[i]
↑これが分かって、
Python
1i = 0 2bar = [10,20][i]
が理解しにくいと言う事ですよね?
これは、
Python
1foo = 2+3 2bar = foo*9
と、
Python
1bar = (2+3)*9
の関係と同じです。
変数foo
が他で使われていない限り、同じ結果です。
投稿2020/05/11 23:56
総合スコア85901
0
そのコードは横着しすぎてます。
こうしたらわかりやすいでしょうか。
python3
1# coding: utf-8 2months = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] \ 3 ,[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]] 4 5is_leap_year = 0 6days_of_month = months[is_leap_year] 7print(days_of_month) 8is_leap_year = 1 9days_of_month = months[is_leap_year] 10print(days_of_month)
新しく作った配列 months には要素が2つあります。
months[0]にはうるう年でない場合の月ごとの日数、
months[1]にはうるう年の場合の月ごとの日数が入ります。
このコードと説明で理解できるでしょうか。
monthsを一旦変数に入れずにdays_of_monthへの代入を一気にやろうとすると質問のようなコードになります。
個人的意見ですが、こんな書き方は真似してほしくない。
投稿2020/05/11 15:44
総合スコア4447
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私なら、つぎのようにしますね。
python3
1DAYS_OF_MONTHS = { 2 False: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], 3 True: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 4} 5 6# is_leap_year = True # False 7# the_days_of_month = DAYS_OF_MONTHS[is_leap_year] 8 9print(DAYS_OF_MONTHS[True]) 10print(DAYS_OF_MONTHS[False])
質問文のコードでは、 is_leap?_year は 本来 bool 値なのに
それを 0, 1 の integer に割当てています。さらに それを配列アクセスの添字に使っているのです。
しかも 配列の構造が [12][2]となっていて、直感とすこしずれているのです。([月の日数][年の種類] の順番になっている)
私が示したコードでは is_leap_year を True, False としています。
そして dict[is_leap_lear] で [月] の配列が得られるようにしているし、
dict の書き方も 年の種類 -> 月の日数の配列 という順序で宣言をしています。
投稿2020/05/12 11:54
総合スコア22324
0
わかりやすいように、
is_leap_year = 0 days_of_month = [ [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] ][is_leap_year] print days_of_month[is_leap_year] > [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
この宣言を分解すると、
is_leap_year = 0 days = [ [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] ] days_of_month = days[is_leap_year] print days_of_month[is_leap_year] > [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
上記のような宣言をしたときに
is_leap_year = 0の時は、[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
is_leap_year = 1の時は、[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
がdays_of_monthに入ります。
というのは、
days[0]
と
days[1]
を考えてみればわかると思います。
投稿2020/05/11 15:51
編集2020/05/11 15:52総合スコア820
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/12 13:12 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/12 13:12
2020/05/12 13:16 編集
2020/05/12 13:24
2020/05/12 13:37 編集
2020/05/12 13:53 編集