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

Python NameError:ไม่ได้กำหนดชื่อ 'xrange' Solution

ใน Python 3 ฟังก์ชัน xrange ถูกลบ หากคุณพยายามใช้ฟังก์ชัน xrange ในโปรแกรม Python 3 คุณจะพบ NameError: name ‘xrange’ is not defined ข้อผิดพลาด.

ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้และสาเหตุที่คุณอาจพบข้อผิดพลาดนี้ เราจะพูดถึงตัวอย่างข้อผิดพลาดนี้เพื่อให้คุณได้เรียนรู้วิธีแก้ไขในโค้ด

NameError:ไม่ได้กำหนดชื่อ 'xrange'

ใน Python 2 ฟังก์ชัน xrange ช่วยให้คุณสร้างช่วงของตัวเลขได้ พิจารณาข้อมูลโค้ดต่อไปนี้:

print(xrange(0, 3))

รหัสของเราส่งคืน [0, 1, 2] ซึ่งเป็นตัวเลขทั้งหมดในช่วง 0 และ 3 (ไม่รวม 3) xrange() ฟังก์ชั่นส่งคืนรายการตัวเลข

Python 3 ลบ xrange() ทำหน้าที่แทนฟังก์ชันใหม่ที่เรียกว่า range() range() ฟังก์ชัน เช่น xrange() , สร้างช่วงของตัวเลข

xrange() . มีความแตกต่างสองประการ และ range();

  • xrange() และ range() มีชื่อเรียกต่างกัน
  • The xrange() ฟังก์ชั่นสร้างรายการตัวเลข range() ฟังก์ชั่นสร้างวัตถุ

เนื่องจาก range() ฟังก์ชันสร้างวัตถุ คุณต้องแปลงเป็นรายการหากต้องการดูรายการตัวเลข มิฉะนั้น ทั้งสองวิธีนี้จะทำงานในลักษณะเดียวกัน

ตัวอย่างสถานการณ์

เราจะเขียนโปรแกรมที่แสดงผู้เล่นสองสามคนแรกที่อยู่ด้านบนสุดของกระดานผู้นำเกมไพ่ ในการเริ่มต้น มาประกาศลีดเดอร์บอร์ดของเราเป็นรายการ:

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

leaderboard = ["Alex", "Jonas", "Emma", "Kate"]

ต่อไป เราจะถามผู้ใช้ว่าพวกเขาต้องการดูคะแนนกี่คะแนน:

to_view = int(input("How many scores would you like to view? "))

เราแปลงค่าที่ผู้ใช้ใส่เป็นจำนวนเต็ม นี่เป็นเพราะว่า xrange() ฟังก์ชันรองรับเฉพาะจำนวนเต็มเท่านั้น

ต่อไป มาทำซ้ำในรายการลีดเดอร์บอร์ดของเราโดยใช้ for loop เราจะแสดงเฉพาะจำนวนผลลัพธ์ที่ผู้ใช้ร้องขอให้ดูบนคอนโซล:

for l in xrange(0, to_view):
	print(l + 1, leaderboard[l])

เราใช้ xrange() ฟังก์ชันเพื่อสร้างช่วงของตัวเลขระหว่าง 0 ถึงจำนวนที่ผู้ใช้ใส่ ใน for loop ของเรา เราใช้ print() คำสั่งพิมพ์รายการกระดานผู้นำที่สัมพันธ์กับตัวเลขใน xrange() รายการที่วงของเรากำลังดูอยู่

เราพิมพ์ค่าของ “l” บวกหนึ่งข้างชื่อผู้เล่น ทำให้เราเห็นตำแหน่งของพวกเขา เนื่องจากรายการถูกสร้างดัชนีจากศูนย์ เราจึงเพิ่มรายการหนึ่งไปที่ “l” ซึ่งจะป้องกันไม่ให้ผู้เล่นคนแรกในรายชื่อของเราอยู่ที่ตำแหน่ง "0" เป็นต้น

เรียกใช้รหัสของเราและดูว่าเกิดอะไรขึ้น:

How many scores would you like to view? 2
Traceback (most recent call last):
  File "main.py", line 5, in <module>
	for l in xrange(0, to_view):
NameError: name 'xrange' is not defined

โปรแกรมของเราส่งคืนข้อผิดพลาด

การแก้ปัญหา

เราใช้ xrange() ฟังก์ชันสร้างช่วงของตัวเลข ใน Python 2 สิ่งนี้จะถูกต้อง เรากำลังใช้ Python 3 เพื่อรันโปรแกรม ซึ่งหมายความว่าเราไม่สามารถอ้างอิง xrange() การทำงาน.

เพื่อแก้ไขข้อผิดพลาด เราต้องแทนที่ xrange() ด้วย range() กระบวนการ:

for l in range(0, to_view):
	print(l + 1, leaderboard[l])

สำหรับกรณีการใช้งานนี้ ทั้ง xrange() และ range() ก็จะได้ผลลัพธ์เหมือนเดิม เรียกใช้โค้ดของเราเพื่อดูว่าใช้งานได้หรือไม่:

How many scores would you like to view? 2
1 Alex
2 Jonas

โปรแกรมของเราแสดงชื่อผู้เล่นในการแข่งขันที่ปรากฏในสองตำแหน่งแรกบนกระดานผู้นำได้สำเร็จ

กำหนดวิธีการ xrange() ใหม่

วิธีแก้ปัญหาที่เป็นไปได้สำหรับปัญหานี้คือการกำหนดตัวแปรที่เรียกว่า xrange ที่จุดเริ่มต้นของโปรแกรมของคุณซึ่งเท่ากับ range() การทำงาน:

xrange = range

นี่ไม่ใช่วิธีแก้ปัญหาที่ดีสำหรับข้อผิดพลาดนี้ เนื่องจากคุณเพียงหลีกเลี่ยงปัญหาในการเปลี่ยนชื่อวิธีการที่มีอยู่ อาจทำให้บางคนสับสนในการอ่านโค้ดเบส Python 3 และดู xrange() คำสั่งแม้ว่าคุณจะกำหนด xrange เป็นตัวแปรก็ตาม

ทางออกที่ดีที่สุดคือการเปลี่ยนชื่อ xrange() . ของคุณ คำสั่งไปยัง range() และเพื่อทำการเปลี่ยนแปลงที่จำเป็นเพื่อให้แน่ใจว่า codebase ของคุณทำงานใน Python 3

บทสรุป

ข้อผิดพลาด "NameError:ชื่อ 'xrange' ไม่ได้ถูกกำหนด" ขึ้นเมื่อคุณพยายามใช้ xrange() วิธีสร้างช่วงของตัวเลขใน Python 3 เพื่อแก้ไขข้อผิดพลาดนี้ ให้อัปเดตรหัสของคุณเพื่อใช้ range() วิธีการที่มาพร้อมกับ Python 3

range() เป็นการแทนที่ Python 3 สำหรับ xrange() . ตอนนี้คุณมีความรู้ที่จำเป็นในการแก้ไขข้อผิดพลาดนี้อย่างมืออาชีพแล้ว!