Code Python bị lỗi list index out of range

em bị lỗi list index out of range có anh chị nào biết cách sửa thì chỉ điểm giúp em với ạ
mã lỗi:

 File "c:\Users\HoangAnh\Documents\main.py", line 31, in <module>
    dichuyen(a,b)
  File "c:\Users\HoangAnh\Documents\main.py", line 27, in dichuyen
    if u>=0 and u<n and v>=0 and v<n and A([u][v])==0:
IndexError: list index out of range
X=[-2,-2,-1,-1,-1,1,1,2,2]
Y=[-1,1,-2,2,-2,2,-1,1]
A=[[],[]]
dem=0
print("nhap n")
n= int(input())
print("nhap vi tri ban dau x,y:")
a=int(input())
b=int(input())
def xuat():
    for i in range(n):
        for j in range(n):
            print(A[[i],[j]])

def dichuyen(x,y):
    global dem ,n
    dem=dem +1
    A[[x][y]]=dem
    for i in range(8):
        if dem== n * n :
            print("cac buoc di chuyen la")
            xuat()
            exit()
        u=x+X[i]
        v=y+Y[i]
        if u>=0 and u<n and v>=0 and v<n and A[u][v]==0:
            dichuyen(u,v)
    dem=dem-1
    A[[x][y]]=0
dichuyen(a,b)

fix lỗi thì nên đi từ những cái đơn giản nhất.
bắt đầu từ thông báo lỗi, bạn có đọc hiểu được thông báo lỗi chưa

3 Likes

Mình đọc rồi cũng tìm qua trên mạng của lỗi thứ 2 rồi nhưng mnh chưa tìm các tìm được hướng khắc phục cho bài mình , còn lỗi đầu thì đọc không sao hiểu nổi

Dòng 1 là do gọi hàm này nên lỗi.

Lỗi index ngoài chỉ số truy cập sai còn có nguyên nhân là mảng thêm xóa, khởi tạo có vấn đề.

4 Likes

Code hiện tại và thông báo lỗi đã không còn khớp với nhau, bạn vui lòng update lại code mới nhất và thông báo lỗi mới nhất đi bạn ơi.
Tiếp theo, thật sự nhìn code của bạn nó hời hợt làm sao đó:
A=[[],[]] thì kiểu của A là gì? Size của các chiều của A là bao nhiêu?
print(A[[i],[j]]) thì A[[i],[j]] này nghĩa là gì?
A[[x][y]]=dem thì A[[x][y]] nghĩa là gì?
Còn A[u][v] thì sao?

3 Likes

Mảng A chỉ có 1 phần tử ở chiều 1 và 2 phần tử ở chiều 2. Chưa thấy chỗ nào bạn thêm phần tử vào A cả chiều 1 và 2.
Nếu n mà lớn hơn 1 và 2 thì lỗi sẽ xảy ra.

Mình không ngờ cú pháp này lại rất hợp lệ, không lỗi cú pháp. :rofl:
Nhờ nó hợp lệ mà bạn làm một phần tử nào đó của mảng A trở thành mảng 1 chiều và… ừ thì 1 chiều sao mà truy xuất theo mảng 2 chiều được.
Sẽ xuất hiện lỗi: TypeError: 'int' object is not subscriptable. Đáng lẽ lỗi này phải xảy ra trước mới phải.

3 Likes

[x] => cái này là list nè
nên khi lấy phần tử thứ y của list đó thì ghi [x][y], vẫn đúng cú pháp iterable[index]
A[[x][y]] lúc này [x][y] đóng vai trò là index thì cũng đúng cú pháp luôn
tất nhiên là chả ai chấp nhật code kiểu vậy :smiley:

4 Likes

Mình là chuyển bài toán mã tuần ở bên c++ sang python , mnh dựa trên đó để viết
Link code c++ : https://nguyenvanhieu.vn/bai-toan-ma-di-tuan/

Thế thì đoạn A[[],[]] không tương ứng với int A[MAX][MAX] rồi.

2 Likes

Để khởi tạo mảng 2 chiều đúng thì cần tìm hiểu về mutable trong Python.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?