Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python TypeError:ดัชนีรายการต้องเป็นจำนวนเต็มหรือสไลซ์ ไม่ใช่โฟลต Solution

รายการถูกจัดทำดัชนีโดยใช้หมายเลขดัชนี ตัวเลขเหล่านี้เป็นค่าจำนวนเต็ม หากคุณพยายามเข้าถึงรายการจากรายการโดยใช้หมายเลขทศนิยม ข้อผิดพลาด "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:ดัชนีรายการต้องเป็นจำนวนเต็มหรือสไลซ์ ไม่ใช่ลอย” เกิดขึ้นเมื่อคุณพยายามเข้าถึงรายการจากรายการโดยใช้ตัวเลขทศนิยม เพื่อแก้ไขข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าคุณใช้เฉพาะจำนวนเต็มเพื่อเข้าถึงรายการในรายการตามค่าดัชนี

ตอนนี้คุณพร้อมที่จะแก้ไขข้อผิดพลาดนี้ในโค้ดของคุณอย่างมืออาชีพแล้ว!