pythonで1年(365日)の中で「6」がついている日数がいくつあるか知りたいです。 以下のように初心者ながら記述してみました。
pythonで1年(365日)の中で「6」がついている日数がいくつあるか知りたいです。 以下のように初心者ながら記述してみました。 ただ以下の形で表示させると期待値が「69」に対して「72」とでます。 余計に何がカウントされているのかがわからず困っています。 コーディングも合わせて何が原因か教えていただけないでしょうか。 また、もう少し簡単なやり方があればご教示ください よろしくお願い申し上げます。 input_line = 6 day = [] for item in range(365): day.append(item+1) day = str(day) print(input_line) cnt = day.count(input_line) print(cnt) #期待値69
ベストアンサー
72(69+3)になる原因は、他の方も書いている通り66,166,266の3つが2重にカウントされている。 ・str(day)でリストを文字列化すると'[1, 2, 3, 4]'のようにリストの表記そのままで文字列化される ・str.count()は1文字ずつ確認し、一致すればカウントしてしまう。str(day)した時点で166のような1固まりの数としては認識されなくなる。 簡単に書くなら(〇はインデント) count = 0 for i in range(1, 366): 〇if input_line in str(i): 〇〇count += 1 print(count) あるいは行数を減らすなら内包表記を使って len([i for i in range(1, 366) if input_line in str(i)]) ポイント: ・item+1は不要。rangeは開始の数値も指定できる。逆に終了は指定した数-1なので366。 ・すべての数字をリストにappendするのはあまり意味がない。やるにせよday = list(range(1, 366))で済む。 ・リストに追加する時点で条件を満たしたものだけいれるようにする方が普通(if input_line in str(i):の条件。上ではカウントしているが、dayにappendして後でlen(day)で条件を満たす要素数を数えてもいい)
質問者からのお礼コメント
理解できました。 わかりやすいアンサーありがとうございます
お礼日時:5/25 21:42