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

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

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

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

Q&A

2回答

1098閲覧

時間範囲の重複カウントにつて

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2019/05/10 14:36

時間範囲が被っていれば、被っている数の分カウントするプログラムを作ろうと思っています。
時刻のデータは以下の様な.txtで保存してあります。(各行での左時刻が開始時刻、右軸が終了時刻)

data1.txt

111:00 12:00 213:00 14:00

data2.txt

111:20 11:50 212:30 14:00

data3.txt

110:20 11:30 213:10 13:30

10:20-10:59 はカウント数1,11:00-11-20まではカウント数が3と出力されるプログラムを考えています。
同じ文字が被っていた場合のカウント方法はわかるのですが時刻範囲のカウント方法のイメージが湧かなくて詰まっています。。。
よろしくお願いいたします。

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

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

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

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

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

LouiS0616

2019/05/11 01:43

『11:00-11-20まではカウント数が3』というのが良く分からないです。 これは 11:20 11:50 が 11:00-11-20 の範囲に被っている扱いだと言うことでしょうか?
退会済みユーザー

退会済みユーザー

2019/05/11 01:49

説明不足で申し訳ありません。 上の3つの時間のデータはdata1.txt dta2.txt data3.txtで別々に保存しており、11:00-11:20の時間帯に被っているのは、3つのデータすべてに被っているので出力結果を3にしたいということです。
guest

回答2

0

datetimeモジュールの日付型は比較できるので以下のように書けば簡単だと思います。

python

1from datetime import datetime 2 3def main(): 4 # 文字列の時間を日付型に変換 5 a = datetime.strptime('10:20', '%H:%M') 6 b = datetime.strptime('10:59', '%H:%M') 7 8 time = datetime.strptime('11:00', '%H:%M') 9 10 if a <= time <= b: 11 print('時間内') 12 else: 13 print('時間外') 14 15if __name__ == "__main__": 16 main()

投稿2019/05/10 15:41

編集2019/05/10 15:47
mistn

総合スコア1191

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

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

退会済みユーザー

退会済みユーザー

2019/05/11 01:19

回答ありがとうございます。 この場合だと、.txtファイルを読み込むプログラムを書いた後、以上のプログラムをカウントするプログラムに変更して書けばよいということで大丈夫でしょうか?
mistn

2019/05/11 01:41

そうです。回答にあるプログラムは例なので自分のやりたいことに合うように変更してください。
退会済みユーザー

退会済みユーザー

2019/05/11 01:50

ありがとうございます。実際にやってみます。
guest

0

datetime モジュールに timedelta という datetime 型の差分を保持する型があります。時刻を datetime 型で持ち、差分が2つの時刻の差分の範囲内にあるかを検査すればよいのではないでしょうか。こんな感じで:

python

1import datetime 2 3def main(): 4 today = datetime.datetime.today() 5 timelist = [ 6 (datetime.datetime(today.year, today.month, today.day, 11, 0), 7 datetime.datetime(today.year, today.month, today.day, 12, 0)), 8 (datetime.datetime(today.year, today.month, today.day, 11, 30), 9 datetime.datetime(today.year, today.month, today.day, 12, 30)) 10 ] 11 t = datetime.datetime.now() 12 count = 0 13 for tpair in timelist: 14 maxspan = tpair[1] - tpair[0] 15 span = t - tpair[0] 16 if span.days >= 0 and span.seconds < maxspan.seconds: 17 count += 1 18 print(str(count)) 19 20if __name__ == '__main__': 21 main()
  • 時刻1以降かどうかの検査は、(時刻t - 時刻1) の timedelta が0以上か(時刻1より前の場合 timedelta.days がマイナスになる)で見て
  • 時刻2よりも前かどうかは時刻1を引いた timedelta の秒数が (時刻2-時刻1)の秒数より小さいかどうかで判別しています。

エレガントではないなあと思うのですが、とっさに思いついたのはこんなところです。

投稿2019/05/10 15:27

cugel

総合スコア220

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問