回答編集履歴
14
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
|
-
|
173
|
+
return sorted_carlist
|
178
174
|
|
179
|
-
available_cars
|
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
test
CHANGED
@@ -47,7 +47,7 @@
|
|
47
47
|
元のコードでは、ループの最初で、リクエストした予約時間が1件目のBobの予約と重複するのでいったん除外されますが、
|
48
48
|
次のループで2件目(Jackの予約)と比較するタイミングで、Jackの予約時間とリクエスト予約時間とは重複しないため、sorted_list に加えられてしまいます。
|
49
49
|
|
50
|
-
正しくは **「着目している車1台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車に対して予約
|
50
|
+
正しくは **「着目している車1台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車に対して予約がゼロの場合含む)」に初めて sorted_list に加える** という考え方になります。
|
51
51
|
(もちろん前提として当該車のStatusはAvailableでなければなりません)
|
52
52
|
|
53
53
|
|
12
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
test
CHANGED
@@ -36,19 +36,18 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
### 例:
|
39
|
-
たとえば、customerlist(予約済み一覧)
|
39
|
+
たとえば、customerlist(予約済み一覧)が下記の2件であるとします。
|
40
|
-
ここで、同じSE001Aを、10月5日12時~10月6日12時までJackが利用するという予約が追加されているとします。
|
41
|
-
```
|
40
|
+
```text
|
42
|
-
予約状況
|
41
|
+
<予約状況>
|
43
|
-
SE001A
|
42
|
+
1 SE001A Bob 10月03日09時~10月05日09時
|
44
|
-
SE001A
|
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の予約
|
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
test
CHANGED
@@ -105,7 +105,7 @@
|
|
105
105
|
**「上記①~④のいずれかにあてはまる」という条件**は、
|
106
106
|
下記のようにまとめて1行にできます。(※等号付き不等号については修正済みとする)
|
107
107
|
|
108
|
-
**「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」ではない
|
108
|
+
**「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」ではない**
|
109
109
|
(コメントで「001B」が除外されていることから、ピックアップと返却が同時になる場合は重複と見なしていると判断)
|
110
110
|
|
111
111
|
### 4.その他
|
9
test
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
下は質問記載のコードの一部をそのまま引用したものです。
|
2
|
-
なお、質問に記載されている縛りとして「インポートするモジュールは、datet
|
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
|
-
# 質問に記載されている縛り「インポートするモジュールは、datet
|
141
|
+
# 質問に記載されている縛り「インポートするモジュールは、datetime のみ」
|
142
142
|
from datetime import datetime
|
143
143
|
|
144
144
|
#入力値
|
8
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
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
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
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]
|
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
|
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
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
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
test
CHANGED
@@ -23,31 +23,41 @@
|
|
23
23
|
for l in customerlist:で予約を1件ずつ取り出し、
|
24
24
|
その予約1件について、carlist内の該当するプレートナンバーの車について、下記の条件にすべて当てはまらない場合、その車をsorted_carlist に加えています。
|
25
25
|
|
26
|
-
言い換えると、上記のコードでは、取り出した
|
26
|
+
言い換えると、上記のコードでは、carlist から1件ずつ取り出した車について、予約済み案件を1件ずつ参照し「その予約済み案件の車のナンバープレートが、着目している車のナンバープレートと等しく」かつ「列挙した条件をすべて満たさなかった場合」 sorted_list に入れています。
|
27
|
-
しかしながら、このコードでは「その予約が取り出した車のナンバープレートに等しくない場合」には有無をいわさずsorted_list に入ってしまっていることに注意が必要です。
|
28
27
|
|
29
|
-
|
28
|
+
しかしながら、同時に「着目している車と、取り出した予約済み案件の対象となる車が等しくない場合」には有無をいわさずsorted_list に入れてしまっていることに注意が必要です。
|
30
29
|
|
31
|
-
|
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台に割り当てられているすべての予約についてリクエストした条件と重複するか調べ、すべて重複しない場合(その車
|
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
|
-
実は(すべてのデータについて「ピックアップタイム<返却時間」となっており、かつデータに不整合がない限り)
|
103
|
+
実は(すべてのデータについて「ピックアップタイム<返却時間」となっており、かつデータに不整合がない限り)
|
104
|
+
**「上記①~④のいずれかにあてはまる」という条件**は、
|
105
|
+
下記のようにまとめて1行にできます。(※等号付き不等号については修正済みとする)
|
94
106
|
|
95
|
-
**「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」でない**
|
107
|
+
**「(予約済返却時間 < 希望ピックアップタイム) または (希望返却時間 < 予約済ピックアップタイム)」ではない」**
|
96
108
|
(コメントで「001B」が除外されていることから、ピックアップと返却が同時になる場合は重複と見なしていると判断)
|
97
109
|
|
98
110
|
|
1
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':
|