লিস্টের মতো, পাইথন টাপল ইন্ডেক্সড। এর মানে হল একটি টাপলের প্রতিটি ভ্যালুর একটি নম্বর থাকে যা আপনি সেই ভ্যালু অ্যাক্সেস করতে ব্যবহার করতে পারেন। যখন আপনি একটি টাপলে এমন একটি আইটেম অ্যাক্সেস করার চেষ্টা করেন যা وجود নেই, পাইথন একটি এরর রিটার্ন করে যা বলে "tuple index out of range"।
এই গাইডে, আমরা এই সাধারণ পাইথন এররটি কী বোঝায় এবং কেন এটি উঠে সেটি ব্যাখ্যা করব। আমরা এই সমস্যা উপস্থিত একটি উদাহরণ সিনেরিওর মাধ্যমে যাব যাতে আমরা বুঝতে পারি কীভাবে এটি সমাধান করব।
সমস্যা বিশ্লেষণ: IndexError: tuple index out of range
টাপলগুলো ০ থেকে ইন্ডেক্সড। একটি টাপলে প্রতিটি পরের ভ্যালুর একটি নম্বর অ্যাসাইন করা থাকে যা লাস্টটির চেয়ে এক বেশি। একটি টাপল দেখুন:
birds = ("Robin", "Collared Dove", "Great Tit", "Goldfinch", "Chaffinch")
এই টাপলে পাঁচটি ভ্যালু আছে। প্রতিটি ভ্যালুর নিজস্ব ইন্ডেক্স নম্বর আছে:
| Robin | Collared Dove | Great Tit | Goldfinch | Chaffinch |
| 0 | 1 | 2 | 3 | 4 |
আমাদের টাপলে "Robin" ভ্যালু অ্যাক্সেস করতে, আমরা এই কোডটি ব্যবহার করব:
print(birds[0])
আমাদের কোড রিটার্ন করে: Robin। আমরা ইন্ডেক্স পজিশন ১-এর ভ্যালু অ্যাক্সেস করি এবং কনসোলে প্রিন্ট করি। আমরা আমাদের লিস্টের যেকোনো ভ্যালুর সাথে এটি করতে পারি।
যদি আমরা আমাদের টাপলের বাইরে একটি আইটেম অ্যাক্সেস করার চেষ্টা করি, একটি এরর উটবে।
একটি উদাহরণ সিনেরিও
চলুন একটি প্রোগ্রাম লিখি যা একটি টাপলে লাস্ট তিনটি ভ্যালু প্রিন্ট করে। আমাদের টাপলে যুক্তরাষ্ট্রের সিটির একটি লিস্ট আছে। চলুন একটি টাপল ডিক্লেয়ার করে শুরু করি:
cities = ("Edinburgh", "London", "Southend", "Bristol", "Cambridge")
পরবর্তীতে, আমরা লাস্ট তিনটি ভ্যালু প্রিন্ট করব। আমরা এটি একটি for লুপ এবং একটি range() স্টেটমেন্ট ব্যবহার করে করব। range() স্টেটমেন্ট একটি নির্দিষ্ট রেঞ্জের মধ্যে সংখ্যার একটি লিস্ট তৈরি করে যাতে আমরা আমাদের লিস্টে যেসব আইটেমের ইন্ডেক্স নম্বর সেটি রেঞ্জে আছে সেগুলোর ওপর ইটারেট করতে পারি।
এখানে আমাদের for লুপের কোড:
for i in range(3, 6):
print(birds[i])
চলুন আমাদের কোড রান করার চেষ্টা করি:
Goldfinch Chaffinch Traceback (most recent call last): File "main.py", line 4, inprint(birds[i]) IndexError: tuple index out of range
আমাদের কোড Goldfinch এবং Chaffinch ভ্যালুগুলো প্রিন্ট করে। এগুলো আমাদের লিস্টের লাস্ট দুটি ভ্যালু। এটি কোনো থার্ড ভ্যালু প্রিন্ট করে না।
সমাধান
আমাদের range() স্টেটমেন্ট ৩ এবং ৬ রেঞ্জের মধ্যে সংখ্যার একটি লিস্ট তৈরি করে। এই লিস্ট ৩ ইনক্লুসিভ এবং ৬ এক্সক্লুসিভ। আমাদের লিস্ট শুধু ৪ পর্যন্ত ইন্ডেক্সড। এর মানে আমাদের লুপ আমাদের টাপলে ইন্ডেক্স পজিশন ৫-এ একটি বิร์ড অ্যাক্সেস করার চেষ্টা করবে কারণ ৫ আমাদের রেঞ্জে আছে।
চলুন দেখি কী হয় যদি আমরা আলাদা birds[5] প্রিন্ট করার চেষ্টা করি:
print(birds[5])
আমাদের কোড রিটার্ন করে:
Traceback (most recent call last): File "main.py", line 3, inprint(birds[5]) IndexError: tuple index out of range
একই এররটি উপস্থিত। এর কারণ হল আমরা আমাদের লিস্টের আইটেমগুলোকে অ্যাক্সেস করার চেষ্টা করছি যেন সেগুলো ১ থেকে ইন্ডেক্সড। টাপলগুলো ০ থেকে ইন্ডেক্সড।
এই এররটি সমাধান করতে, আমাদের আমাদের range() স্টেটমেন্ট রিভাইজ করতে হবে যাতে এটি শুধু আমাদের টাপলের লাস্ট তিনটি আইটেম প্রিন্ট করে। আমাদের রেঞ্জ ২ থেকে ৫ পর্যন্ত যেতে হবে:
for i in range(2, 5):
print(birds[i])
চলুন আমাদের রিভাইজড কোড রান করি এবং দেখি কী হয়:
Great Tit Goldfinch Chaffinch
আমাদের কোড সফলভাবে আমাদের লিস্টের লাস্ট তিনটি আইটেম প্রিন্ট করে। আমরা এখন ইন্ডেক্স পজিশন ২, ৩, এবং ৪-এ আইটেম অ্যাক্সেস করছি। এই সব পজিশন বৈধ তাই আমাদের কোড এখন কাজ করছে।
উপসংহার
IndexError: tuple index out of range এররটি ঘটে যখন আপনি একটি টাপলে এমন একটি আইটেম অ্যাক্সেস করার চেষ্টা করেন যা وجود নেই। এই সমস্যাটি সমাধান করতে, নিশ্চিত করুন যে আপনি যখনই একটি টাপল থেকে একটি আইটেম অ্যাক্সেস করছেন, আপনি যে আইটেমটি খুঁজছেন সেটি وجود আছে।
এই এররটির সবচেয়ে সাধারণ কারণ হল ভুলে যাওয়া যে টাপলগুলো ০ থেকে ইন্ডেক্সড। টাপল থেকে একটি ভ্যালু অ্যাক্সেস করার চেষ্টা করার সময় ০ থেকে কাউন্টিং শুরু করুন। একটি বিগিনার হিসেবে, এটি অদ্ভুত লাগতে পারে। যেমত সময় আপনি পাইথনে কোডিং করতে ব্যয় করবেন, ০ থেকে কাউন্ট করা সেকেন্ড নেচার হয়ে যাবে।
এখন আপনি এই পাইথন এররটি এক্সপার্টের মতো সমাধান করার জন্য রেডি!