質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

1055閲覧

[学校の課題]何月から何月までという2つの数を引数として受け取り、その期間の日数を返す関数の作成をしています。年をまたぐ計算方法がわからず苦戦しています。

hirano0111

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/10 02:58

前提・実現したいこと

学校の課題で、何月から何月までという2つの数を引数として受け取り、その期間の日数を返す関数の作成をしています。
なお、注意点として12月〜1月などの年をまたぐ計算もしなくてはなりません。
■■な機能を実装中に以下のエラーメッセージが発生しました。

質問内容

発生している問題として年をまたぐ計算方法がわからず苦戦しています。提出期限が迫っているため助けてください????

エラーメッセージ

該当のソースコード

python

1ソースコード 2def month_to_days(m): 3 if (1 <= m <= 12): 4 d = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31} 5 return d[m] 6 else: 7 return "そんな月はありません" 8 9 10month1 = int(input("何月から?: ")) 11month2 = int(input("何月まで?: ")) 12 13days = 0 14 15for i in range(month1, month2 + 1): 16 days += month_to_days(i) 17 18print(days) 19 20### 試したこと 21ごめんなさい!全くわかりません! 22 23ここに問題に対して試したことを記載してください。 24 25### 補足情報(FW/ツールのバージョンなど) 26Google colaboratoryでやってます。 27ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/07/10 03:09

コードは「コードの挿入」で記入してください。
fiveHundred

2021/07/10 03:12

> 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 (https://teratail.com/help/avoid-asking) > 課題や仕事を無償でやってもらえる場ではありません。 (https://teratail.com/help/question-tips) ということなので、ここではなく学校の先生に聞いてください。
gentaro

2021/07/10 04:42

ガイドラインを100回音読しよう。 宿題代行サイトじゃない。 授業料払ってるのに先生に聞かないのも意味がわからない。
guest

回答3

0

「年をまたぐか?」によって条件分けして処理すればよいです。

Python

1if 年をまたぐ: 2 s = 開始月から年末までの期間 3 e = 年始から終了月までの期間 4 days = s + e: 5else: 6 days = 開始月から終了月までの期間

投稿2021/07/10 03:19

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

13月~23月が足りないのではないですか。

それを追加して、あと一工夫しましょう。

しかし、うるう年に対応するのはもっと大変ですね。

投稿2021/07/10 03:16

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

datetime --- 基本的な日付型および時間型

from datetime import date today = date.today() this_year = today.year month1 = int(input("何月から?: ")) month2 = int(input("何月まで?: ")) if (month1 > month2): # 2つめの入力が小さい場合年を跨いだと判断 print('{}日間'.format((date(this_year+1,month2,1)-date(this_year,month1,1)).days)) else: # それ以外は、今年の月として計算 print('{}日間'.format((date(this_year,month2,1)-date(this_year,month1,1)).days))

前提条件が少し足りないと思いました。
入力2が入力1よりも小さい数の場合は年を跨ぐと判断するでいいのですよね?

pythonの標準モジュールを使うとこのように素直に計算できます。

でも、これは提出できないと思います。

関数を利用するとなると、

python

1days = 0 2months_list=[1,2,3,4,5,6,5,8,9,10,11,12] * 2 3 4month1_index=months_list.index(month1) 5month2_index=months_list.index(month2,month1_index)

を利用してリストmonths_listから月に対応するリスト(例:[12,1,2,3])を作って、今もやろうとしているように、足してみてはどうですか?

投稿2021/07/10 08:58

toshikawa

総合スコア388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問