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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

1544閲覧

pythonのassertion Errorを解決したい。

Oskaronarin

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/01/14 14:13

前提・実現したいこと

pythonの初心者向けの動画を一時停止しながら書いたコードで
発生しているassertion Errorを解決したい。

以下のAssertionErrorで止まってしまいます・・

assert solution(classes2) == answer2 AssertionError

該当のソースコード

python

1#課題:ある学校の授業の時間割が与えられる 2#1つの教室で同時にできる授業は1つまで 3#学校に教室はいくつ必要か? 4#[(開始時間, 終了時間) , 。。。] 5#以下動画の中の説明のメモありです・・ 6 7classes1 = [(0, 50), (50, 100)] 8answer1 = 1 9classes2 = [(0, 50), (50, 100), (25, 75)] 10answer2 = 2 11classes3 = [(10, 50), (20, 30), (60, 100), (70, 90)] 12answer3 = 2 13classes4 = [(900, 910), (940, 1200), (950, 1120), (1100, 1130), (1500, 1900), (1800, 2000)] 14answer4 = 3 15 16def overlaps(a, b): #授業を2つ受け取って 17 return b[0] < a[0] and a[0] < b[1] 18#True 授業aの開始時間が授業bの開始時間より遅い、かつ、授業aが授業bの終了時間に入っていたらかぶっていると判定する 19 20 21def solution(classes):#授業の一覧が送られる 22 num_classes = len(classes)#全ての授業の数 23 max_rooms = 1 #最終的に返す値、瞬間的に必要となる教室の最大数、絶対に1教室は必要なので1から始める 24 for i in range(num_classes): #全ての時間割をチェックする 25 rooms = 1 #ある授業を開催する際に必要になる教室数を入れるため 26 for j in range(num_classes):# このforはiの時間割を全ての時間割と比較するため 27 if i == j: #もしも同じ授業だったら、 28 continue #チェックせずに継続する(1つ目の授業と1つ目を比べても意味がないため) 29 if overlaps(classes[i], classes[j]):#もし授業iと授業jがかぶっていたなら、 30 rooms =+ 1 #roomsに1を追加する 31 max_rooms = max(max_rooms, rooms)#これまで必要になった教室の数より多いようだったらmax_roomsを返す 32 return max_rooms 33 34assert solution(classes1) == answer1#assertはこの条件が満たされなければここでプログラムが停止するという意味 35assert solution(classes2) == answer2 36assert solution(classes3) == answer3 37assert solution(classes4) == answer4 38print("Okay")#return max_roomsまでのコードが正しかったらRunした結果はOkayとなる=assertは正解であるとなる 39

試したこと

動画の中で最初にassert solution(classes2) == answer2の同じエラーが発生しているのですが、
動画で修正したように修正したはずなのですが、動画に写ってない部分があるのか、エラーになります・・

補足情報(FW/ツールのバージョンなど)

AWS Cloud9で実行しています。

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

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

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

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

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

y_waiwai

2020/01/14 14:16

まずはそのエラーが出てる箇所を特定しましょう。 それがわからないとどーにもなりません。
Oskaronarin

2020/01/15 12:35

それがすぐにできるように学習します!
guest

回答3

0

ベストアンサー

2ヵ所修正しました。

1.return max_roomsのインデントを変更しました(1回目のforに対応)
2.rooms =+ 1をrooms += 1に変更しました。

Python

1def overlaps(a, b): #授業を2つ受け取って 2 return b[0] < a[0] and a[0] < b[1] 3 4def solution(classes):#授業の一覧が送られる 5 num_classes = len(classes)#全ての授業の数 6 max_rooms = 1 #最終的に返す値、瞬間的に必要となる教室の最大数、絶対に1教室は必要なので1から始める 7 for i in range(num_classes): #全ての時間割をチェックする 8 rooms = 1 #ある授業を開催する際に必要になる教室数を入れるため 9 for j in range(num_classes):# このforはiの時間割を全ての時間割と比較するため 10 if i == j: #もしも同じ授業だったら、 11 continue #チェックせずに継続する(1つ目の授業と1つ目を比べても意味がないため) 12 if overlaps(classes[i], classes[j]):#もし授業iと授業jがかぶっていたなら、 13 rooms += 1 #roomsに1を追加する 14 max_rooms = max(max_rooms, rooms)#これまで必要になった教室の数より多いようだったらmax_roomsを返す 15 return max_rooms

上手くいかないときはデバッグしてください。ツールを使っても良いですし机上デバッグ(紙とペン)でも良いです。1行ずつ動作が予定通りになっているか確認しましょう。

投稿2020/01/14 15:00

meg_

総合スコア10577

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

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

Oskaronarin

2020/01/15 12:42

修正箇所、ありがとうございます。すっきりしました! デバックはこれからトライしてみようと思っています。紙とペンというのもありなのですね。
guest

0

これ↓合ってますか?

python

1def overlaps(a, b): #授業を2つ受け取って 2 return b[0] < a[0] and a[0] < b[1] 3#True 授業aの開始時間が授業bの開始時間より遅い、かつ、授業aが授業bの終了時間に入っていたらかぶっていると判定する

投稿2020/01/14 15:14

編集2020/01/14 15:20
cateye

総合スコア6851

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

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

退会済みユーザー

退会済みユーザー

2020/01/14 15:24

元々のコードだと、assert solution([(100, 110), (100, 110)]) == 2 みたいに同じ時間にスタートする授業があると判定に失敗しますね。
Oskaronarin

2020/01/15 13:16

なるほど、そうなのですね。
guest

0

これだとroomsに1を代入してるだけ

python

1 rooms =+ 1 #roomsに1を追加する

インデントを1つ下げすぎ

python

1 return max_rooms

投稿2020/01/14 15:12

tatamyiwathy

総合スコア1039

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

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

Oskaronarin

2020/01/15 12:36

ヒントありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問