รายการถูกจัดทำดัชนีโดยใช้หมายเลขดัชนี ตัวเลขเหล่านี้เป็นค่าจำนวนเต็ม หากคุณพยายามเข้าถึงรายการจากรายการโดยใช้หมายเลขทศนิยม ข้อผิดพลาด "TypeError:ดัชนีรายการต้องเป็นจำนวนเต็มหรือสไลซ์ ไม่ใช่จำนวนลอย" จะแสดงขึ้น
คู่มือนี้จะอธิบายความหมายของข้อผิดพลาดนี้และสาเหตุที่คุณอาจพบข้อผิดพลาดนี้ เราจะอธิบายตัวอย่างข้อผิดพลาดนี้เพื่อให้คุณได้เรียนรู้วิธีแก้ไข
TypeError:ดัชนีรายการต้องเป็นจำนวนเต็มหรือสไลซ์ ไม่ใช่ลอย
เมื่อมีการเพิ่มรายการลงในรายการ รายการนั้นจะได้รับการกำหนดค่าดัชนี ค่าดัชนีเริ่มต้นจากศูนย์และเพิ่มขึ้นทีละรายการสำหรับแต่ละรายการใหม่ในรายการ ทำให้ง่ายต่อการเข้าถึงแต่ละรายการ รายการแรกในรายการมีดัชนี 0 รายการที่สองมีดัชนี 1 และอื่นๆ
คุณไม่สามารถดึงข้อมูลจากรายการโดยใช้ตัวเลขทศนิยม ตัวเลขทศนิยมเป็นประเภทข้อมูลที่แตกต่างกัน ด้วยเหตุนี้ Python จึงถูกปฏิบัติแตกต่างไปจากนี้ รายการคาดหวังหมายเลขดัชนีจำนวนเต็มเนื่องจากรายการได้รับการจัดทำดัชนีโดยใช้จำนวนเต็ม
ตัวอย่างสถานการณ์
เรากำลังจะสร้างโปรแกรมที่ดึงข้อมูลเกี่ยวกับผู้เข้าร่วมการแข่งขันเทนนิส ในการเริ่มต้น ให้กำหนดรายการของรายการ รายชื่อนี้จะมีข้อมูลเกี่ยวกับผู้เข้าร่วมการแข่งขันทั้งหมด:
participants = [ ["Alex Rogers", 5, 2], ["Linda Patterson", 3, 4], ["Ruby Spencer", 1, 6] ]
รายชื่อผู้เข้าร่วมของเรามีสามรายการ แต่ละรายการเหล่านี้ระบุชื่อผู้เข้าร่วม จำนวนเกมที่พวกเขาชนะ และจำนวนเกมที่พวกเขาแพ้ ตามลำดับ
ค่าจะเรียงตามจำนวนครั้งที่ผู้เล่นชนะ
ต่อไป เราขอข้อมูลผู้เล่นที่ต้องการดูจากผู้ใช้ เราทำสิ่งนี้โดยใช้คำสั่ง input():
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
player_to_find = float(input("Enter the leaderboard position of the player you want to find: "))
หมายเลขที่ผู้ใช้ใส่ควรสอดคล้องกับตำแหน่งของผู้เล่นบนกระดานผู้นำ อเล็กซ์ โรเจอร์สเป็นคนแรก หากต้องการทราบเกี่ยวกับเขา ผู้ใช้จะแทรก 1
เราแปลงค่าที่ผู้ใช้ใส่เป็นทศนิยมเนื่องจากเราจะใช้การจัดทำดัชนีในโค้ดของเราในภายหลัง ค่าดัชนีเป็นตัวเลข เราจึงต้องใช้ตัวเลขเพื่อใช้งาน
ถัดไป ใช้การจัดทำดัชนีเพื่อเรียกโปรแกรมเล่นที่ผู้ใช้กำลังมองหา:
player_info = participants[player_to_find - 1]
เราใช้ค่าที่ผู้ใช้ใส่เพื่อค้นหาบันทึกของผู้เล่นแต่ละคนจากรายการ "ผู้เข้าร่วม" ของเรา เราลบ 1 เป็นค่าของ “player_to_find” เนื่องจากรายการถูกสร้างดัชนีจากศูนย์และคนแรกบนกระดานผู้นำจะอยู่ในตำแหน่ง #1
ถัดไป พิมพ์รายละเอียดเกี่ยวกับผู้เข้าร่วมรายนี้ไปที่คอนโซล:
print("Name: {}".format(player_info[0])) print("Wins: {}".format(player_info[1])) print("Losses: {}".format(player_info[2]))
เราแสดงชื่อผู้เล่น จำนวนเกมที่พวกเขาชนะ และจำนวนเกมที่พวกเขาแพ้ให้กับคอนโซล เรียกใช้โปรแกรมของเรา:
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
หลังจากที่เราแทรกตำแหน่งลีดเดอร์บอร์ดในโปรแกรมของเรา เกิดข้อผิดพลาดขึ้น
การแก้ปัญหา
เราแปลงค่าที่ผู้ใช้ใส่ลงในโปรแกรมของเราเป็นค่าทศนิยม เราทำสิ่งนี้โดยใช้ float()
กระบวนการ.
นี่เป็นข้อผิดพลาดเพราะเมื่อถึงเวลาต้องดึงข้อมูลจากรายการ "ผู้เข้าร่วม" เราพยายามทำเช่นนั้นโดยใช้ตัวเลขทศนิยม สิ่งนี้ทำให้เกิดข้อผิดพลาด
ในการแก้ไขโปรแกรมของเรา เราต้องแปลงค่าที่ผู้ใช้ใส่เป็นจำนวนเต็มแทนที่จะเป็นตัวเลขทศนิยม เราสามารถทำได้โดยใช้ int()
กระบวนการ:
player_to_find = int(input("Enter the leaderboard position of the player you want to find: "))
ตอนนี้เรามีค่าจำนวนเต็มแล้ว เราสามารถดึงข้อมูลจากรายการของเราโดยใช้การจัดทำดัชนี เรียกใช้รหัสของเราและดูว่าเกิดอะไรขึ้น:
Enter the number of the player you want to find: 2 Name: Linda Patterson Wins: 3 Losses: 4
รหัสของเราแสดงให้เราเห็นบันทึกผู้เล่นของบุคคลที่อยู่ในตำแหน่ง #2 บนกระดานผู้นำได้สำเร็จ
บทสรุป
ข้อผิดพลาด “TypeError:ดัชนีรายการต้องเป็นจำนวนเต็มหรือสไลซ์ ไม่ใช่ลอย” เกิดขึ้นเมื่อคุณพยายามเข้าถึงรายการจากรายการโดยใช้ตัวเลขทศนิยม เพื่อแก้ไขข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าคุณใช้เฉพาะจำนวนเต็มเพื่อเข้าถึงรายการในรายการตามค่าดัชนี
ตอนนี้คุณพร้อมที่จะแก้ไขข้อผิดพลาดนี้ในโค้ดของคุณอย่างมืออาชีพแล้ว!