কম্পিউটার

Python TypeError:তালিকা সূচকগুলি অবশ্যই পূর্ণসংখ্যা বা স্লাইস হতে হবে, ভাসা সমাধান নয়

তালিকাগুলি সূচী সংখ্যা ব্যবহার করে সূচিত করা হয়। এই সংখ্যা পূর্ণসংখ্যা মান. যদি আপনি একটি ফ্লোটিং-পয়েন্ট নম্বর ব্যবহার করে একটি তালিকা থেকে একটি আইটেম অ্যাক্সেস করার চেষ্টা করেন, "TypeError:তালিকা সূচকগুলি অবশ্যই পূর্ণসংখ্যা বা স্লাইস হতে হবে, ফ্লোট নয়" ত্রুটি উত্থাপিত হবে৷

এই নির্দেশিকা আলোচনা করে যে এই ত্রুটির অর্থ কী এবং কেন আপনি এটির সম্মুখীন হতে পারেন৷ আমরা এই ত্রুটির একটি উদাহরণ দিয়ে হেঁটে যাবো যাতে আপনি এটি কীভাবে ঠিক করতে হয় তা শিখতে পারেন৷

TypeError:তালিকা সূচকগুলি অবশ্যই পূর্ণসংখ্যা বা স্লাইস হতে হবে, ফ্লোট নয়

যখন একটি আইটেম একটি তালিকায় যোগ করা হয়, আইটেম একটি সূচক মান বরাদ্দ করা হয়. তালিকার প্রতিটি নতুন আইটেমের জন্য সূচকের মান শূন্য থেকে শুরু হয় এবং একটি করে বৃদ্ধি পায়। এটি পৃথক আইটেম অ্যাক্সেস করা সহজ করে তোলে। একটি তালিকার প্রথম আইটেমের সূচক আছে 0, দ্বিতীয়টিতে রয়েছে সূচক 1, ইত্যাদি।

আপনি ফ্লোটিং-পয়েন্ট নম্বর ব্যবহার করে একটি তালিকা থেকে আইটেম পুনরুদ্ধার করতে পারবেন না। ফ্লোটিং-পয়েন্ট সংখ্যা একটি ভিন্ন ডেটা টাইপ। ফলস্বরূপ, তারা পাইথন দ্বারা ভিন্নভাবে চিকিত্সা করা হয়। তালিকাগুলি একটি পূর্ণসংখ্যা সূচক নম্বর আশা করে কারণ তালিকাগুলি পূর্ণসংখ্যা ব্যবহার করে সূচিত করা হয়৷

একটি উদাহরণ দৃশ্য

আমরা একটি প্রোগ্রাম তৈরি করতে যাচ্ছি যা একটি টেনিস টুর্নামেন্টে অংশগ্রহণকারী সম্পর্কে তথ্য পুনরুদ্ধার করে। শুরু করতে, তালিকার একটি তালিকা নির্ধারণ করুন। তালিকার এই তালিকায় টুর্নামেন্টের সমস্ত অংশগ্রহণকারীদের সম্পর্কে তথ্য থাকবে:

participants = [
	    ["Alex Rogers", 5, 2],
	    ["Linda Patterson", 3, 4],
	    ["Ruby Spencer", 1, 6]
]

আমাদের অংশগ্রহণকারীদের তালিকায় তিনটি তালিকা রয়েছে। এইগুলির প্রত্যেকটি একজন অংশগ্রহণকারীর নাম, তারা কতগুলি গেম জিতেছে এবং কতগুলি গেম হেরেছে, সেই ক্রমে তালিকাভুক্ত করে।

একজন খেলোয়াড় কতবার জিতেছে তার সংখ্যা অনুসারে মানগুলি সাজানো হয়।

এরপরে, আমরা ব্যবহারকারীকে সেই প্লেয়ারের জন্য জিজ্ঞাসা করি যার তথ্য তারা দেখতে চায়। আমরা একটি input() স্টেটমেন্ট ব্যবহার করে এটি করি:

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগদানের পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।

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 বিয়োগ করি কারণ তালিকাগুলি শূন্য থেকে সূচিত করা হয়েছে এবং লিডারবোর্ডে প্রথম ব্যক্তিটি #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:তালিকা সূচকগুলি অবশ্যই পূর্ণসংখ্যা বা স্লাইস হতে হবে, ফ্লোট নয়" ত্রুটি দেখা দেয় যখন আপনি একটি ফ্লোটিং-পয়েন্ট নম্বর ব্যবহার করে একটি তালিকা থেকে একটি আইটেম অ্যাক্সেস করার চেষ্টা করেন৷ এই ত্রুটিটি সমাধান করার জন্য, নিশ্চিত করুন যে আপনি শুধুমাত্র পূর্ণসংখ্যাগুলি ব্যবহার করে একটি তালিকার আইটেমগুলিকে তাদের সূচকের মান অনুসারে অ্যাক্সেস করছেন৷

এখন আপনি একজন পেশাদারের মতো আপনার কোডে এই ত্রুটিটি ঠিক করতে প্রস্তুত!


  1. পাইথনে সূচক দ্বারা একটি তালিকার উপাদান খুঁজুন

  2. পূর্ণসংখ্যার একটি পাইথন তালিকার প্রতিটি উপাদানে K যোগ করা হচ্ছে

  3. পাইথন প্রোগ্রাম পূর্ণসংখ্যার তালিকা থেকে সদৃশ মুদ্রণ করতে?

  4. পাইথন প্রোগ্রাম একটি তালিকা খালি কি না পরীক্ষা করতে?