回答編集履歴

14

 

2022/10/23 08:15

投稿

退会済みユーザー
test CHANGED
@@ -170,15 +170,15 @@
170
170
  # どの予約とも重複しない場合
171
171
  sorted_carlist.append(carlist[d])
172
172
 
173
- if sorted_carlist == [] :
174
- print("There is no car available for your requested time.")
175
- else:
176
- print("There is Available car for your request!")
177
- return sorted_carlist
173
+ return sorted_carlist
178
174
 
179
- available_cars = sort_availablecar()
175
+ available_cars = sort_availablecar()
176
+ if available_cars == []:
177
+ print("There is no car available for your requested time.")
178
+ else:
179
+ print("There is Available car for your request!")
180
- for car in available_cars:
180
+ for car in available_cars:
181
- print(car)
181
+ print(car)
182
182
  ```
183
183
 
184
184
  あまりなじみがないかもしれませんが、「すべての条件をパスした場合」という制御のために、python の for ... else ...文を使っています。

13

 

2022/10/23 08:09

投稿

退会済みユーザー
test CHANGED
@@ -47,7 +47,7 @@
47
47
  元のコードでは、ループの最初で、リクエストした予約時間が1件目のBobの予約と重複するのでいったん除外されますが、
48
48
  次のループで2件目(Jackの予約)と比較するタイミングで、Jackの予約時間とリクエスト予約時間とは重複しないため、sorted_list に加えられてしまいます。
49
49
 
50
- 正しくは **「着目している車1台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車に対して予約ゼロの場合含む)」に初めて sorted_list に加える** という考え方になります。
50
+ 正しくは **「着目している車1台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車に対して予約ゼロの場合含む)」に初めて sorted_list に加える** という考え方になります。
51
51
  (もちろん前提として当該車のStatusはAvailableでなければなりません)
52
52
 
53
53
 

12

 

2022/10/23 05:53

投稿

退会済みユーザー
test CHANGED
@@ -56,8 +56,8 @@
56
56
  わかりやすいように、変数名を下記のように読みかえます。
57
57
  + request_pickuptime = 希望ピックアップ日時
58
58
  + request_returntime = 希望返却日時
59
- + reservedpickup_str = 割当てピックアップ日時
59
+ + reservedpickup_str = 予約済ピックアップ日時
60
- + reservedreturn_str = 割当て返却日時
60
+ + reservedreturn_str = 予約済返却日時
61
61
 
62
62
 
63
63
 
@@ -67,7 +67,7 @@
67
67
  > ①予約済ピックアップ日時 < 希望ピックアップ日時
68
68
  >   かつ 希望返却日時 < 予約済返却日時  (=予約期間が希望期間を全部内包)
69
69
  >
70
- > ②希望ピックアップ日時 < 予約済済みピックアップ日時
70
+ > ②希望ピックアップ日時 < 予約済ピックアップ日時
71
71
  >   かつ 予約済ピックアップ日時 < 希望返却日時
72
72
  >   かつ 希望返却日時 < 予約済返却日時 (=希望返却日時が予約済ピックアップ日をまたぐ)
73
73
  >
@@ -93,10 +93,10 @@
93
93
  >   かつ 希望返却日時 < 予約済返却日時  (=予約期間が希望期間を全部内包)
94
94
 
95
95
  だと、希望ピックアップ日時と、予約済ピックアップ日時が等しいため、①の条件にあてはまらず、予約可能、ということになってしまいます。
96
- くは
96
+ たがって一般的に考えられる意図通りに動かすならば、
97
97
  > ①予約済ピックアップ日時 ≦ 希望ピックアップ日時
98
98
  >   かつ 希望返却日時 ≦ 予約済返却日時  (=予約期間が希望期間を全部内包)
99
- です。
99
+ とすべきです。
100
100
  ②~③も同様に修正する必要があります。
101
101
 
102
102
  ### 3.条件を簡単にする

11

 

2022/10/22 06:33

投稿

退会済みユーザー
test CHANGED
@@ -36,19 +36,18 @@
36
36
 
37
37
 
38
38
  ### 例:
39
- たとえば、customerlist(予約済み一覧)を見ると、SE001A は10月3日9時~10月5日9時でBobが利用予定でが、
39
+ たとえば、customerlist(予約済み一覧)が下記の2件であるとます
40
- ここで、同じSE001Aを、10月5日12時~10月6日12時までJackが利用するという予約が追加されているとします。
41
- ```
40
+ ```text
42
- 予約状況
41
+ 予約状況
43
- SE001A Bob 10月3日9時~10月5日9時
42
+ 1 SE001A Bob 10月03日09時~10月05日09時
44
- SE001A Jack 10月5日12時~10月6日12時
43
+ 2 SE001A Jack 10月05日12時~10月06日12時
45
44
  ```
46
45
  リクエストする予約時間は、コードの通り 10月4日9時~10月5日9時とします。
47
46
 
48
- 元のコードでは、ループの最初で、リクエストした予約時間が1件目のBobの利用と重複するのでいったん除外されますが、
47
+ 元のコードでは、ループの最初で、リクエストした予約時間が1件目のBobの予と重複するのでいったん除外されますが、
49
- 次のループでJackの予約時間と比較するタイミングで、Jackの予約時間とリクエスト予約時間とは重複しないため、sorted_list に加えられてしまいます。
48
+ 次のループで2件目(Jackの予約と比較するタイミングで、Jackの予約時間とリクエスト予約時間とは重複しないため、sorted_list に加えられてしまいます。
50
49
 
51
- 正しくは **「着目している車1台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車に対して予約画ゼロの場合含む)」に初めて sorted_list に加えるべき** す。
50
+ 正しくは **「着目している車1台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車に対して予約画ゼロの場合含む)」に初めて sorted_list に加える** という考え方になります。
52
51
  (もちろん前提として当該車のStatusはAvailableでなければなりません)
53
52
 
54
53
 

10

 

2022/10/22 06:26

投稿

退会済みユーザー
test CHANGED
@@ -105,7 +105,7 @@
105
105
  **「上記①~④のいずれかにあてはまる」という条件**は、
106
106
  下記のようにまとめて1行にできます。(※等号付き不等号については修正済みとする)
107
107
 
108
- **「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」ではない**
108
+ **「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」ではない**
109
109
  (コメントで「001B」が除外されていることから、ピックアップと返却が同時になる場合は重複と見なしていると判断)
110
110
 
111
111
  ### 4.その他

9

 

2022/10/22 06:24

投稿

退会済みユーザー
test CHANGED
@@ -1,5 +1,5 @@
1
1
  下は質問記載のコードの一部をそのまま引用したものです。
2
- なお、質問に記載されている縛りとして「インポートするモジュールは、dateteime のみ」とのこと。
2
+ なお、質問に記載されている縛りとして「インポートするモジュールは、datetime のみ」とのこと。
3
3
  ```python
4
4
  for d in carlist:
5
5
  if carlist[d]['Category'] == requestcategory and carlist[d]['Status'] == 'Available':
@@ -138,7 +138,7 @@
138
138
  上記を参考に元のコードを書き換えたのが下記です。
139
139
  (変更がなるべく最小限になるように書き換えています)
140
140
  ```python
141
- # 質問に記載されている縛り「インポートするモジュールは、dateteime のみ」
141
+ # 質問に記載されている縛り「インポートするモジュールは、datetime のみ」
142
142
  from datetime import datetime
143
143
 
144
144
  #入力値

8

 

2022/10/22 06:23

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,5 @@
1
1
  下は質問記載のコードの一部をそのまま引用したものです。
2
+ なお、質問に記載されている縛りとして「インポートするモジュールは、dateteime のみ」とのこと。
2
3
  ```python
3
4
  for d in carlist:
4
5
  if carlist[d]['Category'] == requestcategory and carlist[d]['Status'] == 'Available':
@@ -137,6 +138,7 @@
137
138
  上記を参考に元のコードを書き換えたのが下記です。
138
139
  (変更がなるべく最小限になるように書き換えています)
139
140
  ```python
141
+ # 質問に記載されている縛り「インポートするモジュールは、dateteime のみ」
140
142
  from datetime import datetime
141
143
 
142
144
  #入力値

7

 

2022/10/22 06:21

投稿

退会済みユーザー
test CHANGED
@@ -166,7 +166,7 @@
166
166
  # 重複する予約が存在する場合
167
167
  break
168
168
  else:
169
- # すべての予約と重複しない場合
169
+ # の予約と重複しない場合
170
170
  sorted_carlist.append(carlist[d])
171
171
 
172
172
  if sorted_carlist == [] :

6

 

2022/10/22 06:20

投稿

退会済みユーザー
test CHANGED
@@ -132,6 +132,7 @@
132
132
  とします。
133
133
 
134
134
  ---
135
+ # 修正案
135
136
 
136
137
  上記を参考に元のコードを書き換えたのが下記です。
137
138
  (変更がなるべく最小限になるように書き換えています)
@@ -179,4 +180,4 @@
179
180
  print(car)
180
181
  ```
181
182
 
182
-
183
+ あまりなじみがないかもしれませんが、「すべての条件をパスした場合」という制御のために、python の for ... else ...文を使っています。

5

2022/10/22 06:16

投稿

退会済みユーザー
test CHANGED
@@ -107,6 +107,29 @@
107
107
  **「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」ではない」**
108
108
  (コメントで「001B」が除外されていることから、ピックアップと返却が同時になる場合は重複と見なしていると判断)
109
109
 
110
+ ### 4.その他
111
+ ```python
112
+ sorted_carlist = carlist[d]
113
+ ```
114
+
115
+ これだと最後の抽出された車情報しか格納されません。
116
+ ```python
117
+ sorted_carlist.append(carlist[d])
118
+ ```
119
+ 等とするべきでしょう。
120
+
121
+
122
+
123
+ ```python
124
+ return sorted_carlist['PlateN']
125
+ ```
126
+ sorted_carlist はリストとして初期化されているので、辞書のようにアクセスできません。
127
+ ここは
128
+
129
+ ```python
130
+ return sorted_carlist
131
+ ```
132
+ とします。
110
133
 
111
134
  ---
112
135
 
@@ -143,18 +166,17 @@
143
166
  break
144
167
  else:
145
168
  # すべての予約と重複しない場合
146
- # (ここは結果がわかりやすいようにナンバープレートだけ表示するようにしている。
147
- #  車の情報全部表示したい場合は、sorted_carlist.append(carlist[d]) とする)
148
- sorted_carlist.append(carlist[d]['PlateN'])
169
+ sorted_carlist.append(carlist[d])
149
170
 
150
171
  if sorted_carlist == [] :
151
172
  print("There is no car available for your requested time.")
152
173
  else:
153
174
  print("There is Available car for your request!")
154
- return sorted_carlist#['PlateN']
175
+ return sorted_carlist
155
176
 
156
- a = sort_availablecar()
177
+ available_cars = sort_availablecar()
178
+ for car in available_cars:
157
- print(a)
179
+ print(car)
158
180
  ```
159
181
 
160
182
 

4

 

2022/10/22 06:11

投稿

退会済みユーザー
test CHANGED
@@ -143,8 +143,8 @@
143
143
  break
144
144
  else:
145
145
  # すべての予約と重複しない場合
146
- # ここは結果がわかりやすいようにナンバープレーだけ表示するようにし
146
+ # ここは結果がわかりやすいようにナンバープレーだけ表示するようにしている
147
- # 車の情報全部表示したい場合は、sorted_carlist.append(carlist[d]) とする
147
+ #  車の情報全部表示したい場合は、sorted_carlist.append(carlist[d]) とする
148
148
  sorted_carlist.append(carlist[d]['PlateN'])
149
149
 
150
150
  if sorted_carlist == [] :

3

 

2022/10/22 06:10

投稿

退会済みユーザー
test CHANGED
@@ -143,7 +143,9 @@
143
143
  break
144
144
  else:
145
145
  # すべての予約と重複しない場合
146
+ # ここは結果がわかりやすいようにナンバープレー度だけ表示するようにした。
147
+ # 車の情報全部表示したい場合は、sorted_carlist.append(carlist[d]) とする。
146
- sorted_carlist.append(carlist[d]['PlateN'])
148
+ sorted_carlist.append(carlist[d]['PlateN'])
147
149
 
148
150
  if sorted_carlist == [] :
149
151
  print("There is no car available for your requested time.")

2

 

2022/10/22 06:08

投稿

退会済みユーザー
test CHANGED
@@ -23,31 +23,41 @@
23
23
  for l in customerlist:で予約を1件ずつ取り出し、
24
24
  その予約1件について、carlist内の該当するプレートナンバーの車について、下記の条件にすべて当てはまらない場合、その車をsorted_carlist に加えています。
25
25
 
26
- 言い換えると、上記のコードでは、取り出した1件の車について、予約を1件ずつ比較し「その予約が取り出車のナンバープレート等しく」かつ上記の条件をすべて満たさなかった場合 sorted_list に入れています。
26
+ 言い換えると、上記のコードでは、carlist から1件ずつ取り出した車について、予約済み案件を1件ずつ参照し「その予約済み案件の車のナンバープレート、着目ている車のナンバープレート等しく」かつ「列挙した条件をすべて満たさなかった場合 sorted_list に入れています。
27
- しかしながら、このコードでは「その予約が取り出した車のナンバープレートに等しくない場合」には有無をいわさずsorted_list に入ってしまっていることに注意が必要です。
28
27
 
29
- また、customerlist (予約一覧)から取り出した予約済み案件1件につてだけ利用時間比較した結果4つの条件当てまらなければすぐに sorted_list に加えるようにしてしまっている点も問題です。
28
+ しなが、同時に「着目している車と、取り出した予約済み案件の対象となる車が等しくな場合」には有無をいわさずsorted_list に入れてしまっていることに注意が必要です。
30
29
 
31
- 1件だけ比較した際に「その予約済み案件が、着目している車に関するものではない場合」であっても、他の予約済み案件ではその車の利用期間が、リクエストした予約と重なっている可能性があります。
30
+ 「その予約済み案件が、着目している車に関するものではない場合」であっても、他の予約済み案件ではその車の利用期間が、リクエストした予約と重なっている可能性があります。
32
- また、予約一覧から取り出したある予約済み案件が、着目している車に関するものであって、かつその案件がリクエスト予約時間と重複しない場合であっても、他の予約済み案件では、当該車の利用期間がリクエストした予約と重なっている可能性があります。
33
31
 
32
+ また、customerlist (予約一覧)から取り出した予約済み案件1件についてだけ時間を比較し、結果重複条件に当てはまらなければすぐに sorted_list に加えるようにしてしまっている点も問題です。
33
+
34
+ 予約一覧から取り出したある予約済み案件が、着目している車に関するものであって、かつその案件がリクエスト予約時間と重複しない場合であっても、他の予約済み案件では、当該車の利用期間がリクエストした予約と重なっている可能性があります。
35
+
36
+
37
+ ### 例:
34
38
  たとえば、customerlist(予約済み一覧)を見ると、SE001A は10月3日9時~10月5日9時までBobが利用予定ですが、
35
- ここで、同じSE001Aを、10月5日12時~10月6日12時までJackが利用するという予約追加したとします。
39
+ ここで、同じSE001Aを、10月5日12時~10月6日12時までJackが利用するという予約追加されているとします。
40
+ ```
41
+ 予約状況
42
+ SE001A・ Bob・ 10月3日9時~10月5日9時
43
+ SE001A・ Jack・ 10月5日12時~10月6日12時
44
+ ```
45
+ リクエストする予約時間は、コードの通り 10月4日9時~10月5日9時とします。
36
46
 
37
- 元のコードでは、リクエスト予約時間が1件目のBobの利用予定と重複するのでいったん除外されますが、
47
+ 元のコードでは、ループの最初で、リクエストした予約時間が1件目のBobの利用予定と重複するのでいったん除外されますが、
38
48
  次のループでJackの予約時間と比較するタイミングで、Jackの予約時間とリクエスト予約時間とは重複しないため、sorted_list に加えられてしまいます。
39
49
 
40
- 正しくは**「着目している車1台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車予約済み案件がそもそもゼロの場合含む)」に初めて sorted_list に加えるべき**です。
50
+ 正しくは **「着目している車1台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車に対して予約ゼロの場合含む)」に初めて sorted_list に加えるべき** です。
41
- (もちろん当該車のStatusはAvailableでなければなりません)
51
+ (もちろん前提として当該車のStatusはAvailableでなければなりません)
52
+
42
53
 
43
54
  ### 2.不足している条件
44
- 条件も不足しています。
55
+ 重複判定条件も不足しています。
45
56
  わかりやすいように、変数名を下記のように読みかえます。
46
57
  + request_pickuptime = 希望ピックアップ日時
47
58
  + request_returntime = 希望返却日時
48
59
  + reservedpickup_str = 割当て済みピックアップ日時
49
60
  + reservedreturn_str = 割当て済み返却日時
50
-
51
61
 
52
62
 
53
63
 
@@ -90,9 +100,11 @@
90
100
  ②~③も同様に修正する必要があります。
91
101
 
92
102
  ### 3.条件を簡単にする
93
- 実は(すべてのデータについて「ピックアップタイム<返却時間」となっており、かつデータに不整合がない限り)「①~④の**いずれか**にあてはまる」という条件は、下記のようにまとめて1行にできます。
103
+ 実は(すべてのデータについて「ピックアップタイム<返却時間」となっており、かつデータに不整合がない限り)
104
+ **「上記①~④のいずれかにあてはまる」という条件**は、
105
+ 下記のようにまとめて1行にできます。(※等号付き不等号については修正済みとする)
94
106
 
95
- **「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」でない**
107
+ **「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」でない**
96
108
  (コメントで「001B」が除外されていることから、ピックアップと返却が同時になる場合は重複と見なしていると判断)
97
109
 
98
110
 

1

 

2022/10/22 05:57

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,4 @@
1
+ 下は質問記載のコードの一部をそのまま引用したものです。
1
2
  ```python
2
3
  for d in carlist:
3
4
  if carlist[d]['Category'] == requestcategory and carlist[d]['Status'] == 'Available':