কম্পিউটার টিউটোরিয়াল

পাইথন NameError: name 'xrange' is not defined সমাধান

পাইথন ৩-এ, xrange ফাংশনটি সরিয়ে দেওয়া হয়েছে। আপনি যদি পাইথন ৩ প্রোগ্রামে xrange ফাংশন ব্যবহার করার চেষ্টা করেন, তবে আপনি NameError: name 'xrange' is not defined এররটি পাবেন।

এই গাইডে, আমরা এই এররটির অর্থ এবং কেন এটি ঘটে তা আলোচনা করব। আমরা এই এররটির একটি উদাহরণে আলোচনা করব যাতে আপনি আপনার কোডে এটি কীভাবে ঠিক করবেন তা শিখতে পারেন।

NameError: name 'xrange' is not defined

পাইথন ২-এ, xrange ফাংশন আপনাকে সংখ্যার একটি পরিসর তৈরি করতে দেয়। নিচের কোড স্নিপেটটি বিবেচনা করুন:

print(xrange(0, 3))

আমাদের কোড [0, 1, 2] ফেরত দেয়, যা ০ এবং ৩-এর পরিসরে (৩ বাদে) সব সংখ্যা। xrange() ফাংশন সংখ্যার একটি তালিকা ফেরত দেয়।

পাইথন ৩ xrange() ফাংশনটি সরিয়ে দিয়েছে range() নামে একটি নতুন ফাংশনের صالحে। range() ফাংশন, xrange()-এর মতো, সংখ্যার একটি পরিসর তৈরি করে।

xrange() এবং range()-এর মধ্যে দুটি পার্থক্য রয়েছে:

  • xrange() এবং range()-এর নাম ভিন্ন।
  • xrange() ফাংশন সংখ্যার একটি তালিকা তৈরি করে। range() ফাংশন একটি অবজেক্ট তৈরি করে।

যেহেতু range() ফাংশন একটি অবজেক্ট তৈরি করে, তাই আপনি যদি সংখ্যার তালিকা দেখতে চান তবে সেটিকে তালিকায় রূপান্তর করতে হবে। অন্যথায়, এই দুটি মেথড একইভাবে কাজ করে।

একটি উদাহরণ পরিস্থিতি

আমরা একটি প্রোগ্রাম লিখব যা একটি কার্ড গেম লিডারবোর্ডের শীর্ষে থাকা প্রথম কয়েকজন খেলোয়ার দেখাবে। শুরুতে, আমাদের লিডারবোর্ডকে একটি তালিকা হিসেবে ঘোষণা করি:

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

পরবর্তীতে, আমরা ব্যবহারকারীকে জিজ্ঞেস করব কতগুলো স্কোর তারা দেখতে চান:

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

আমরা ব্যবহারকারীর ইনপুট মানকে ইন্টিজারে রূপান্তর করি। কারণ xrange() ফাংশন শুধু ইন্টিজার সাপোর্ট করে।

পরবর্তীতে, একটি for লুপ ব্যবহার করে আমাদের লিডারবোর্ড তালিকার ওপর ইটারেট করব। আমরা কনসোলে ব্যবহারকারী যে تعداد রিকোয়েস্ট করেছেন ততটুকু ফলাফল দেখাব:

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

আমরা xrange() ফাংশন ব্যবহার করি ০ এবং ব্যবহারকারীর দেওয়া সংখ্যার মধ্যে সংখ্যার পরিসর তৈরি করতে। আমাদের for লুপে, আমরা print() স্টেটমেন্ট ব্যবহার করি লিডারবোর্ড এন্ট্রি প্রিন্ট করতে যা xrange() তালিকার সংখ্যার সাথে মিলে যায়।

আমরা "l" এর মান প্লাস এক এবং খেলোয়ারের নাম প্রিন্ট করি। এতে আমরা তাদের পজিশন দেখতে পাই। যেহেতু তালিকা শূন্য থেকে ইনডেক্সড, তাই আমরা "l"-এর সাথে এক যোগ করি। এটা প্রথম খেলোয়ারকে পজিশন "০"-এ থাকতে বাধা দেয়।

আমাদের কোড রান করি এবং দেখি কী হয়:

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

আমাদের প্রোগ্রাম একটি এরর ফেরত দেয়।

সমাধান

আমরা xrange() ফাংশন ব্যবহার করেছি সংখ্যার পরিসর তৈরি করতে। পাইথন ২-এ, এটি বৈধ হতো। আমরা পাইথন ৩ ব্যবহার করছি আমাদের প্রোগ্রাম রান করতে, যার মানে আমরা 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

এটি এই এররটির জন্য একটি ভালো সমাধান নয়। কারণ আপনি শুধু এক্সিস্টিং মেথডهاর নাম পরিবর্তন করার সমস্যাটি এড়াচ্ছেন। কেউ পাইথন ৩ কোডবেস পড়ে xrange() স্টেটমেন্ট দেখলে বিভ্রান্ত হবে, আপনি ভले xrange কে ভেরিয়েবল হিসেবে সংজ্ঞায়িত করে থাকেন।

সেরা সমাধান হলো আপনার xrange() স্টেটমেন্টগুলাকে range()-এ রিনেম করা এবং নিশ্চিত করা যে আপনার কোডবেস পাইথন ৩-এ কাজ করে।

উপসংহার

"NameError: name 'xrange' is not defined" এররটি তখন দেখা দেয় যখন আপনি পাইথন ৩-এ xrange() মেথড ব্যবহার করে সংখ্যার পরিসর তৈরি করার চেষ্টা করেন। এই এররটি সমাধান করতে, আপনার কোডকে আপডেট করুন পাইথন ৩-এর সাথে আসা range() মেথড ব্যবহার করতে।

range() হলো xrange()-এর পাইথন ৩ রিপ্লেসমেন্ট। এখন আপনার पास এই এররটি প্রোফেশনালের মতো সমাধান করার জ্ঞান আছে!

  1. Python-এ def দিয়ে সংজ্ঞায়িত ফাংশন প্লট করার পদ্ধতি? (Matplotlib)

  2. পাইথনে issubset() ফাংশন

  3. পাইথনে ফাংশনের নাম স্ট্রিং আকারে পাওয়া

  4. পাইথনে NameError এক্সসেপশন ক্যাচ করা