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

পাইথন ValueError: max() arg is an empty sequence সমাধান

max() মেথডটি শুধুমাত্র তখন কাজ করে যখন আপনি মেথডে কমপক্ষে একটি মানযুক্ত একটি সিকোয়েন্স (sequence) পাস করেন।

আপনি যদি একটি খালি লিস্টে সবচেয়ে বড় আইটেম খুঁজে বের করার চেষ্টা করেন, তবে আপনি "ValueError: max() arg is an empty sequence" এররটির সম্মুখীন হবেন।

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

ValueError: max() arg is an empty sequence

max() মেথডটি আপনাকে একটি লিস্টে সবচেয়ে বড় আইটেম খুঁজে বের করতে দেয়। এটি min() মেথডের মতো যা একটি লিস্টে সবচেয়ে ছোট আইটেম খুঁজে বের করে।

এই মেথডটি কাজ করার জন্য, max() কমপক্ষে একটি মানযুক্ত একটি সিকোয়েন্স চায়। এর কারণ হল আপনি একটি লিস্টে সবচেয়ে বড় আইটেম খুঁজে বের করতে পারবেন না যদি কোনো আইটেমই না থাকে। সবচেয়ে বড় আইটেম অস্তিত্বে নেই কারণ সার্চ করার জন্য কোনো আইটেম নেই।

min() মেথডে একটি খালি লিস্ট পাস করার চেষ্টা করলে "ValueError: max() arg is an empty sequence" এররটির একটি ভেরিয়েশন পাওয়া যায়। এই এররটি হলো "ValueError: min() arg is an empty sequence"। এই min() এররটি একই কারণেই হয়: আপনি কোনো মান নেই এমন একটি লিস্টে সবচেয়ে ছোট মান খুঁজে বের করতে পারবেন না।

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

আমরা একটি প্রোগ্রাম তৈরি করব যা একজন ছাত্র তার সকল রসায়ন পরীক্ষায় অর্জন করা সর্বোচ্চ গ্রেড বের করবে। শুরুতে, ছাত্রদের একটি লিস্ট সংজ্ঞায়িত করুন:

students = [
    {
        "name": "Ron",
        "grades": [75, 92, 84]
    },
    {
        "name": "Katy",
        "grades": [92, 86, 81]
    },
    {
        "name": "Rachel",
        "grades": [64, 72, 72]
    },
    {
        "name": "Miranda",
        "grades": []
    }
]

আমাদের ছাত্রদের লিস্টে চারটি ডিকশনারি আছে। এই ডিকশনারিগুলো প্রতিটি ছাত্রের নামসহ তাদের অর্জিত গ্রেডের লিস্ট ধারণ করে। মিরান্ডার (Miranda) এখনো কোনো গ্রেড নেই কারণ সে তাড়াতাড়ি রসায়ন ক্লাসে যোগ দিয়েছে।

এরপর, আমাদের ছাত্রদের লিস্টের প্রতিটি ছাত্রের মধ্য দিয়ে যাওয়ার জন্য একটি for লুপ ব্যবহার করুন এবং প্রতিটি ছাত্রের অর্জন করা সর্বোচ্চ গ্রেড এবং গড় গ্রেড বের করুন:

for s in students:
    highest_grade = max(s["grades"])
    average_grade = round(sum(s["grades"]) / len(s["grades"]))
    print("The highest grade {} has earned is {}. Their average grade is {}.".format(s["name"], highest_grade, average_grade))

আমরা max() ফাংশন ব্যবহার করি একজন ছাত্রের অর্জন করা সর্বোচ্চ গ্রেড বের করতে। একজন ছাত্রের গড় গ্রেড গণনা করতে, আমরা তাদের সকল গ্রেডের মোটকে তাদের প্রাপ্ত গ্রেডের সংখ্যা দিয়ে ভাগ করি।

আমরা প্রতিটি ছাত্রের গড় গ্রেডকে round() মেথড ব্যবহার করে নিকটতম পূর্ণ সংখ্যাতে রাউন্ড (round) করি।

আমাদের কোডটি রান করুন এবং ফলাফল দেখুন:

The highest grade Ron has earned is 92. Their average grade is 84.
The highest grade Katy has earned is 92. Their average grade is 86.
The highest grade Rachel has earned is 72. Their average grade is 69.
Traceback (most recent call last):
  File "main.py", line 10, in 
    highest_grade = max(s["grades"])
ValueError: max() arg is an empty sequence

আমাদের কোড সফলভাবে চলে আমাদের লিস্টের চতুর্থ আইটেম পর্যন্ত পৌঁছানোর আগে। আমরা রন (Ron), ক্যাটি (Katy), এবং রাশেল (Rachel)-এর সর্বোচ্চ এবং গড় গ্রেড দেখতে পাচ্ছি। মিরান্ডার (Miranda) জন্য কোনো মান দেখতে পাচ্ছি না।

সমাধান

আমাদের কোড প্রথম তিনজন ছাত্রের জন্য কাজ করে কারণ তাদের প্রত্যেকের গ্রেডের লিস্টে কমপক্ষে একটি গ্রেড আছে। মিরান্ডার (Miranda) কোনো গ্রেড নেই।

কারণ মিরান্ডার (Miranda) কোনো গ্রেড নেই, max() ফাংশনটি এক্সিকিউট হতে ব্যর্থ হয়। max() একটি খালি লিস্টে সবচেয়ে বড় মান খুঁজে বের করতে পারে না।

এই এররটি সমাধান করতে, আমরা চেক করব প্রতিটি গ্রেডের লিস্টে কোনো মান আছে কিনা সর্বোচ্চ গ্রেড গণনা করার চেষ্টা করার আগে। যদি কোনো লিস্টে কোনো মান না থাকে, তবে আমাদের ব্যবহারকারীকে একটি ভিন্ন বার্তা দেখাতে হবে।

চলুন একটি "if" স্টেটমেন্ট ব্যবহার করি যেন কোনো গণনা করার আগে ছাত্রটির কোনো গ্রেড আছে কিনা চেক করি:

for s in students:
    if len(s["grades"]) > 0:
        highest_grade = max(s["grades"])
        average_grade = round(sum(s["grades"]) / len(s["grades"]))
        print("The highest grade {} has earned is {}. Their average grade is {}.".format(s["name"], highest_grade, average_grade))
    else:
        print("{} has not earned any grades.".format(s["name"]))

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

The highest grade Ron has earned is 92. Their average grade is 84.
The highest grade Katy has earned is 92. Their average grade is 86.
The highest grade Rachel has earned is 72. Their average grade is 69.
Miranda has not earned any grades.

আমাদের কোডটি সফলভাবে আমাদের প্রথম তিনজন ছাত্রের সর্বোচ্চ এবং গড় গ্রেড গণনা করেছে। যখন আমাদের কোড মিরান্ডা (Miranda)-এ পৌঁছায়, আমাদের কোড তার সর্বোচ্চ এবং গড় গ্রেড গণনা করে না। বদলে, আমাদের কোড আমাদের জানায় যে মিরান্ডা (Miranda) এখনো কোনো গ্রেড অর্জন করেনি।

উপসংহার

"ValueError: max() arg is an empty sequence" এররটি তখন উঠে যখন আপনি max() মেথড ব্যবহার করে একটি খালি লিস্টে সবচেয়ে বড় আইটেম খুঁজে বের করার চেষ্টা করেন।

এই এররটি সমাধান করতে, নিশ্চিত করুন যে আপনি শুধুমাত্র কমপক্ষে একটি মানযুক্ত লিস্টগুলোকে max() স্টেটমেন্টের মাধ্যমে পাস করছেন। এখন আপনার কাছে এই সমস্যাটি একজন প্রফেশনাল কোডারের মতো সমাধান করার জ্ঞান আছে!

  1. Python-এ লিস্ট প্রিন্ট করা

  2. পাইথনে খালি টাপল কীভাবে তৈরি করবেন?

  3. পাইথনে খালি ডিকশনারি কীভাবে তৈরি করবেন?

  4. পাইথনে খালি লিস্ট কীভাবে তৈরি করবেন?