Computer >> Máy Tính >  >> Lập trình >> Python

Python TypeError:chỉ số danh sách phải là số nguyên hoặc lát cắt, không phải float Giải pháp

Danh sách được lập chỉ mục bằng cách sử dụng số chỉ mục. Các số này là các giá trị nguyên. Nếu bạn cố gắng truy cập một mục từ danh sách bằng số dấu phẩy động, lỗi “TypeError:list list phải là số nguyên hoặc lát cắt, không phải float” sẽ xuất hiện.

Hướng dẫn này thảo luận về lỗi này có nghĩa là gì và tại sao bạn có thể gặp phải nó. Chúng tôi sẽ giới thiệu cho các bạn một ví dụ về lỗi này để bạn có thể tìm hiểu cách khắc phục.

TypeError:chỉ số danh sách phải là số nguyên hoặc lát cắt, không phải là float

Khi một mục được thêm vào danh sách, mục đó sẽ được gán một giá trị chỉ mục. Giá trị chỉ mục bắt đầu từ 0 và tăng dần cho mỗi mục mới trong danh sách. Điều này giúp bạn dễ dàng truy cập các mục riêng lẻ. Mục đầu tiên trong danh sách có chỉ mục 0, mục thứ hai có chỉ mục 1, v.v.

Bạn không thể truy xuất các mục từ danh sách bằng số dấu phẩy động. Số dấu phẩy động là một kiểu dữ liệu khác. Do đó, chúng được Python xử lý khác nhau. Danh sách mong đợi một số chỉ mục nguyên vì danh sách được lập chỉ mục bằng cách sử dụng số nguyên.

Một tình huống mẫu

Chúng tôi sẽ xây dựng một chương trình truy xuất thông tin về một người tham gia giải đấu quần vợt. Để bắt đầu, hãy xác định một danh sách các danh sách. Danh sách danh sách này sẽ chứa thông tin về tất cả những người tham gia giải đấu:

participants = [
	    ["Alex Rogers", 5, 2],
	    ["Linda Patterson", 3, 4],
	    ["Ruby Spencer", 1, 6]
]

Danh sách những người tham gia của chúng tôi có ba danh sách. Mỗi trong số này liệt kê tên của một người tham gia, số trò chơi họ đã thắng và số trò chơi họ đã thua, theo thứ tự đó.

Các giá trị được sắp xếp theo số lần người chơi đã thắng.

Tiếp theo, chúng tôi hỏi người dùng về người chơi có thông tin họ muốn xem. Chúng tôi thực hiện việc này bằng câu lệnh input ():

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

player_to_find = float(input("Enter the leaderboard position of the player you want to find: "))

Số người dùng chèn phải tương ứng với vị trí của một người chơi trên bảng xếp hạng. Alex Rogers là người đầu tiên. Để tìm hiểu về anh ta, người dùng sẽ chèn 1.

Chúng tôi chuyển đổi giá trị mà người dùng chèn thành giá trị thực vì chúng tôi sẽ sử dụng lập chỉ mục sau này trong mã của mình. Giá trị chỉ mục là số và vì vậy chúng tôi sẽ cần một số để làm việc với.

Tiếp theo, sử dụng lập chỉ mục để truy xuất trình phát mà người dùng đang tìm kiếm:

player_info = participants[player_to_find - 1]

Chúng tôi sử dụng giá trị mà người dùng chèn để tìm hồ sơ của một người chơi cá nhân từ danh sách "người tham gia" của chúng tôi. Chúng tôi trừ 1 cho giá trị của “player_to_find” vì danh sách được lập chỉ mục từ 0 và người đầu tiên trên bảng xếp hạng sẽ ở vị trí số 1.

Tiếp theo, in thông tin chi tiết về người tham gia này vào bảng điều khiển:

print("Name: {}".format(player_info[0]))
print("Wins: {}".format(player_info[1]))
print("Losses: {}".format(player_info[2]))

Chúng tôi hiển thị tên của một người chơi, họ đã thắng bao nhiêu trò chơi và họ đã thua bao nhiêu trò chơi trên bảng điều khiển. Hãy chạy chương trình của chúng tôi:

Enter the leaderboard position of the player you want to find: 2
Traceback (most recent call last):
 File "main.py", line 9, in <module>
	    player_info = participants[player_to_find + 1]
TypeError: list indices must be integers or slices, not float

Sau khi chúng tôi chèn vị trí bảng xếp hạng vào chương trình của mình, một lỗi sẽ xuất hiện.

Giải pháp

Chúng tôi chuyển đổi giá trị mà người dùng chèn vào chương trình của chúng tôi thành một float. Chúng tôi thực hiện việc này bằng cách sử dụng float() phương pháp.

Đây là một sai lầm vì khi đến lúc lấy một mục từ danh sách “người tham gia” của chúng tôi, chúng tôi cố gắng làm như vậy với một số dấu phẩy động. Điều này gây ra một lỗi.

Để sửa chữa chương trình của chúng tôi, chúng tôi phải chuyển đổi giá trị mà người dùng chèn thành một số nguyên thay vì một số dấu phẩy động. Chúng ta có thể thực hiện việc này bằng cách sử dụng int() phương pháp:

player_to_find = int(input("Enter the leaderboard position of the player you want to find: "))

Bây giờ chúng ta có một giá trị số nguyên, chúng ta có thể lấy các mục từ danh sách của mình bằng cách sử dụng lập chỉ mục. Chạy mã của chúng tôi và xem điều gì sẽ xảy ra:

Enter the number of the player you want to find: 2
Name: Linda Patterson
Wins: 3
Losses: 4

Mã của chúng tôi hiển thị thành công cho chúng tôi hồ sơ người chơi của cá nhân ở vị trí số 2 trên bảng xếp hạng.

Kết luận

Lỗi “TypeError:list index phải là số nguyên hoặc lát cắt, không phải float” xảy ra khi bạn cố gắng truy cập một mục từ danh sách bằng số dấu phẩy động. Để giải quyết lỗi này, hãy đảm bảo rằng bạn chỉ sử dụng số nguyên để truy cập các mục trong danh sách theo giá trị chỉ mục của chúng.

Bây giờ, bạn đã sẵn sàng để sửa lỗi này trong mã của mình như một người chuyên nghiệp!