01/10/2018, 16:00

Lỗi IndexError: list index out of range khi lấy phần tử thứ m+1 trong mảng

như hình file input ý tưởng của mình là cho dữ liệu của SinhVien, GiaoVien, svTKB, gvTKB, MonHoc vào các mảng tương ứng, sau đó cho chạy 3 dòng for cho mảng SinhVien, svTKB, MonHoc.Nếu có mã sv nào trong bảng sinh viên bằng với mã sv trong bảng svTKB và phần tử kế tiếp của phần tử trong svTKB bằng mã môn học trong mảng MônHọc thì tính số chỉ của sinh viên đó.Sau khi chạy thì in ra thông tin sinh viên như hình và thêm tổng số tín chỉ. Mình đã hoàn thành bài này bằng java

nhưng hiện mình đang học python và muốn code lại bài này bằng python và mình không thể lấy được phần tử thứ m+1 trong mảng và bi báo lỗi IndexError: list index out of range. Mong mọi người giúp đỡ.

HK boy viết 18:08 ngày 01/10/2018

Dòng

for l in range(len(listMH)-1):

đổi thành

for l in range(len(listMH)-2):

Mình nhớ là đã nói với bạn về dòng này rồi, nhưng bạn không chịu tư duy cẩn thận về nó.

Code bạn còn bị indent lỗi phần bên trong for n kia kìa.

P/s: Lần sau không được up screenshot code, hãy up code lên.

nguyen tan phat viết 18:08 ngày 01/10/2018

nó vẫn báo lỗi bạn ơi if listSVTKB[m+1] in listMH[l] and listMH[l+2] == 1:
IndexError: list index out of range

HK boy viết 18:12 ngày 01/10/2018

Sao listSVTKB lại lấy index của listSV? 2 list này liên quan gì đến nhau?

for m in range(len(listSV)-1):
    for n in range(len(listSVTKB)-1):
        ...
        if listSVTKB[m+1] ...: # thế m là index của listSVTKB hay listSV?
nguyen tan phat viết 18:11 ngày 01/10/2018

à lỗi mình r để mình sửa lại

nguyen tan phat viết 18:04 ngày 01/10/2018

if listSVTKB[n+1] in listMH[l+1] and listMH[l+2] == 3:
print(“pass”)
hiện tại test print thử ở trong dòng if này và vẫn chưa print ra được không biết là mình dùng “in” để so sanh có đúng hay không ạ

HK boy viết 18:11 ngày 01/10/2018

Các list của bạn là list 2 chiều hay list 1 chiều? Size như thế nào?

nguyen tan phat viết 18:07 ngày 01/10/2018

[‘51003133’, ‘Duong Huu Phuc’, ‘M\n’, ‘0’, ‘51503116’, ‘Nguyen Hong Thuan’, ‘M\n’, ‘0’, ‘51503207’, ‘Duong Thi Trang’, ‘F\n’, ‘0’]
[‘51503116’, ‘504070\n’, ‘51503116’, ‘501045\n’, ‘51503207’, ‘504070\n’]
[‘504070’, ‘SOA’, ‘3\n’, ‘501045’, ‘DSA1’, ‘4’]
tương ứng là listSV, listSVTKB, listMH. mình không biết phải làm sau để mất dấu \n trong các phần tử.

HK boy viết 18:16 ngày 01/10/2018

if listSVTKB[n+1] in listMH[l+1] and listMH[l+2] == 3:

Sửa thành

if listSVTKB[n+1] == listMH[l+1] and listMH[l+2] == 3:

mình không biết phải làm sau để mất dấu \n trong các phần tử.

Sau khi đọc string, đối với string đọc được thì gán qua 1 bước

s = s.rstrip('\n')

để làm mất dấu \n ở cuối đi.

nguyen tan phat viết 18:07 ngày 01/10/2018

mình đã fix được dấu \n cuối dòng nhưng if listSVTKB[n+1] == listMH[l+1] and listMH[l+2] == 3: thì vẫn không chạy được bạn ạ

HK boy viết 18:11 ngày 01/10/2018

Cái này bạn không up code bằng chữ lên thì mình không biết tại sao lỗi đâu bạn. Bạn up code lên ideone, nhập input đàng hoàng tử tế rồi thả link mình xem nha.

nguyen tan phat viết 18:08 ngày 01/10/2018

mình có thể kết pn fb vs pn để dễ trao đổi k

HK boy viết 18:10 ngày 01/10/2018

Mình không dùng facebook. Trao đổi lập trình thì bạn tiếp tục ở diễn đàn này, tại sao phải vác nhau lên facebook?

nguyen tan phat viết 18:02 ngày 01/10/2018

tại mình thấy fb dễ trao đổi hơn nếu pn thích ở đây thì vẫn ok.ĐÂY LÀ TOÀN BỘ CODE CỦA MÌNH

'''
Created on May 8, 2018

@author: root
'''
from Tranning_test1.SinhVien import SinhVien
from Tranning_test1.GiangVien import GiangVien
from Tranning_test1.MonHoc import MonHoc
from _overlapped import NULL
from filecmp import cmp

class Test():
    sv = SinhVien("51503105", "phat", "F",0,NULL)
    gv = GiangVien("23232323", "phat", "F",0,NULL)
    mh = MonHoc("15050303", "cc", 0)
    list = []
    with open("input2.txt", "r+") as f:
        for line in f:
            line1 = line.split(",")
#             print(line1)
            list.append(line1)
    list_0 = []
    list_0 = list.pop(0)
    d = list_0.pop(0)
    e = list_0.pop(0)
    f = list_0.pop(0)
    listSV = []
    listSVID = []
    listGV = []
    listGVID = []
    listSVTKB = []
    listGVTKB = []
    listMH = []
    for i in list:
        if 'SinhVien' in i[0]:
            q = i[0]
            w = q[9:18]
            r = i[2]
            t = r[0:1]
#             print(t)
            listSVID.append(w)
            listSV.append(w)
            listSV.append(i[1])
            listSV.append(t)
            listSV.append('0')
            if 'M' in i[2]:
                sv.gender = 'M'
            else:
                sv.gender = 'F'
#             print(listSV)
        if 'GiangVien' in i[0]:
            r = i[0]
            t = r[10:18]
            y = i[2]
            u = y[0:1]
            listGV.append(t)
            listGVID.append(t)
            listGV.append(i[1])
            listGV.append(u)
            listGV.append('0')
            if 'M' in i[2]:
                gv.gender = 'M'
            else:
                gv.gender = 'F'
#             print(listGV)
        if 'svTKB' in i[0]:
            y = i[0]
            u = y[6:18]
            o = i[1]
            p = o[0:5]
#             print(u)
            listSVTKB.append(u)
            listSVTKB.append(p)
#         print(listSVTKB)
        if 'gvTKB' in i[0]:
            o = i[0]
            p = o[6:18]
            a = i[1]
            s = a[0:5]
#             print(p)
            listGVTKB.append(p)
            listGVTKB.append(s)
#             print(listGVTKB)
        if 'MonHoc' in i[0]:
            g = i[0]
            h = g[7:18]
            a = i[2]
            s = a[0:1]
#             print(h)
            listMH.append(h)
            listMH.append(i[1])
            listMH.append(s)
#             print(listMH)
            mmh = h
            tmh = i[1]
#             print(tmh)
            tc =mh.getTinChi()
            if i[2] == 1:
                tc = 1
            if i[2] == 2:
                tc = 2
            if i[2] == 3:
                tc = 3
            if i[2] == 4:
                tc = 4
            if i[2] == 5:
                tc = 5
#     print(listGVTKB)
#     print(listGV)
#     print(listSV)
#     print(listSVTKB)
#     print(listMH)
#  --------------------------------------------------------------------------------------
    stcID = sv.getSoTinChiTichLuy()
    for m in range(len(listSV)-1):
        for n in range(len(listSVTKB)-1):
                for l in range(len(listMH)-2):
                    if listSV[m] == listSVTKB[n]:
                        print("đã vào")
#                         print(listSVTKB[n])
#                         print(listSVTKB[n+1])
#                         print(listMH[l])
#                         if listSVTKB[n+1] in listMH[l+1] and listMH[l+2] == 1:
#                             print("cc") 
#                             stcID = stcID + 1
#                             print(stcID)
#                             listSV.insert(n+3, stcID)
#                         if listSVTKB[n+1] in listMH[l+1] and listMH[l+2] == 2:
#                             print("cc")
#                             stcID = stcID + 2
#                             print(stcID)
#                             listSV.insert(n+3,stcID)
#                         print(listSV[m])
#                         print(listMH[l+2])
                        if listSVTKB[n+1] == listMH[l+1] and listMH[l+2] == 3:
                            print("pass")
#                             stcID = stcID + 3
#                             print(stcID)
                            listSV.insert(n+3,stcID)
                        if listMH[l+2] == 4:
                            print("cc")
                            stcID = stcID + 4
                            print(stcID)
                            stcID = stcID + 4
#                         if listSVTKB[n+1] in listMH[l+1] and listMH[l+2] == 5:
#                             print("cc")
#                             stcID = stcID + 5
#                             print(stcID)
#                             listSV.insert(n+3,stcID)
#         stcID = 0

#     print(listSV)

ĐÂY LÀ FILE INPUT

51503207,504070,1503013
SinhVien	51003133,Duong Huu Phuc,M
SinhVien	51503116,Nguyen Hong Thuan,M
SinhVien	51503207,Duong Thi Trang,F
GiangVien	1503013,John Smith,M
GiangVien	1701245,Archer Alexander,M
GiangVien	2331542,Jennifer Aniston,F
svTKB	51503116,504070
svTKB	51503116,501045
svTKB	51503207,504070
gvTKB	1503013,504070
gvTKB	2331542,501045
MonHoc	504070,SOA,3
MonHoc	501045,DSA1,4
HK boy viết 18:03 ngày 01/10/2018

Code này của bạn không đầy đủ, code lại toàn index m, n, l rất khó debug. Bạn chịu khó debug đi nhé.

Bài liên quan
0