9: Nested Structure

9-5: Nested List as Matrix

** ถ้าใช้งานบนมือถือหรือ tablet แนะนำให้ใช้ Chrome หรือ Safari เท่านั้น **

แบบฝึกหัด 9-5 ข้อที่ 1

จงเขียนฟังก์ชัน sum_all(M) รับ M เป็นลิสต์ซ้อนลิสต์ที่แทนเมทริกซ์ของจำนวน ฟังก์ชันนี้คืนผลรวมของทุกจำนวนในเมทริกซ์ M

def sum_all(M): def sum_all(M): s = 0 for row in M: for e in row: s += e return s q = "`" fname = "sum_all" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว') import random M = [[random.randint(-10,10) for i in range(4)] for j in range(3)] params = [[[1,2],[3,4],[2,2]], M] for p in params: fcall = fname + "(" + str(p) + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
แบบฝึกหัด 9-5 ข้อที่ 2

จงเขียนฟังก์ชัน sum_row(M) รับ M เป็นลิสต์ซ้อนลิสต์ที่แทนเมทริกซ์ของจำนวน ฟังก์ชันนี้คืนลิสต์ที่ช่องที่ k เก็บผลรวมของทุกจำนวนในแถวแนวนอนที่ k ของเมทริกซ์ M

def sum_row(M): def sum_row(M): s = [] for r in range(len(M)): su = 0 for c in range(len(M[r])): su += M[r][c] s.append(su) return s q = "`" fname = "sum_row" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว') import random M = [[random.randint(-10,10) for i in range(4)] for j in range(3)] params = [[[1,2],[3,4],[2,2]], M] for p in params: fcall = fname + "(" + str(p) + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
แบบฝึกหัด 9-5 ข้อที่ 3

จงเขียนฟังก์ชัน sum_col(M) รับ M เป็นลิสต์ซ้อนลิสต์ที่แทนเมทริกซ์ของจำนวน ฟังก์ชันนี้คืนลิสต์ที่ช่องที่ k เก็บผลรวมของทุกจำนวนในแถวแนวตั้วที่ k ของเมทริกซ์ M

def sum_col(M): def sum_col(M): s = [] for c in range(len(M[0])): su = 0 for r in range(len(M)): su += M[r][c] s.append(su) return s q = "`" fname = "sum_col" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว') import random M = [[random.randint(-10,10) for i in range(4)] for j in range(3)] params = [[[1,2],[3,4],[2,2]], M] for p in params: fcall = fname + "(" + str(p) + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
แบบฝึกหัด 9-5 ข้อที่ 4

จงเขียนฟังก์ชัน identity(n) รับ n เป็นจำนวนเต็มบวก ฟังก์ชันนี้คืนลิสต์ซ้อนลิสต์ที่แทนเมทริกซ์เอกลักษณ์ (identity matrix) ขนาด nxn (เมทริกซ์เอกลักษณ์ คือ เมทริกซ์จัตุรัสที่ทุกช่องมีค่า 0 ยกเว้นแนวทแยงจากซ้ายบนลงมาขวาล่างมีค่าเป็น 1

def identity( n ): def identity( n ): I = [] for r in range( n ): I.append( [0]*n ) I[r][r] = 1 return I q = "`" fname = "identity" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว') params = [1, 3, 5, 6] for p in params: fcall = fname + "(" + str(p) + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")
แบบฝึกหัด 9-5 ข้อที่ 5

จงเขียนฟังก์ชัน transpose(M) รับ M เป็นลิสต์ซ้อนลิสต์ที่แทนเมทริกซ์ของจำนวน ฟังก์ชันนี้คืนลิสต์ซ้อนลิสต์ที่แทนเมทริกซ์สลับเปลี่ยน (transpose matrix) ของ M

def transpose( M ): def transpose( M ): T = [] nrows = len(M) ncols = len(M[0]) for c in range(ncols): T.append([0]*nrows) for r in range(nrows): T[c][r] = M[r][c] return T q = "`" fname = "transpose" func = Ex().check_function_def(fname, missing_msg="ไม่พบฟังก์ชัน " + (q+fname+q)) func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว') import random M = [[random.randint(-10,10) for i in range(2)] for j in range(5)] params = [[[1,2],[3,4],[2,2]], M] for p in params: fcall = fname + "(" + str(p) + ")" func.check_call(fcall).has_equal_value(incorrect_msg=(q+fcall+q) + " ให้ผลผิด")