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

পাইথন TypeError: can’t multiply sequence by non-int of type ‘str’ সমাধান

পাইথনে আপনি দুটি নম্বর একসাথে গুন করতে পারেন। আপনি একটি নম্বর স্ট্রিং দিয়েও গুন করতে পারেন। এটি একটি স্ট্রিং সিকোয়েন্স রিটার্ন করে যা নির্দিষ্ট সংখ্যক বার রিপিট হয়।

আপনি যদি একটি স্ট্রিংকে অন্য স্ট্রিং দিয়ে গুন করার চেষ্টা করেন, আপনি "TypeError: can't multiply sequence by non-int of type 'str'" এরর সম্মুখীন হবেন।

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

TypeError: can't multiply sequence by non-int of type 'str'

স্ট্রিং একটি সিকোয়েন্সের টাইপ। এর কারণ হলো এতে ক্যারেক্টার রয়েছে যার ওপর পাইথন ইটারেট করতে পারে। অন্যান্য সিকোয়েন্স টাইপ شامل: টাপল, ডিকশনারি, এবং লিস্ট।

আপনি মাল্টিপ্লিকেশন অপারেটর (*) ব্যবহার করেন একটি স্ট্রিং তৈরি করতে যা একটি স্ট্রিংয়ের কন্টেন্ট নির্দিষ্ট সংখ্যক বার রিপিট করে। নিচের কোড বিবেচনা করুন:

print("Cakes! " * 2)

এই কোড রিটার্ন করে: "Cakes! Cakes!"। মাল্টিপ্লিকেশন অপারেটর আমাদের স্ট্রিংকে দুবার রিপিট করিয়েছে।

আপনি মাল্টিপ্লিকেশন অপারেটর ব্যবহার করে একটি স্ট্রিংকে অন্য স্ট্রিং দিয়ে গুন করতে পারবেন না। ইন্টিজার এবং ফ্লোটিং-পয়েন্ট নম্বর একমাত্র ভ্যালু যেগুলো একই ডেটা টাইপের ভ্যালুর সাথে গুন করা যায়। দুটি স্ট্রিং গুন করার জন্য পাইথনের কোনো উপায় নেই।

একটি উদাহরণ সিনেরিও

চলুন একটি প্রোগ্রাম বানাই যা ক্যালকুলেট করে একটি রেস্তোরাঁ তার জাম স্কোনসে বৃহস্পতিবার বিকালে কত টাকা উপার্জন করেছে।

শুরুতে, আমাদের জাম স্কোনসের প্রাইস ডিফাইন করতে হবে। আমরা ইউজারকে input() স্টেটমেন্ট ব্যবহার করে জানাতে বলব সে গত দিন কতটি জাম স্কোনস বিক্রি করেছে:

jam_scone = "1.95"
sold = input("How many jam scones did you sell yesterday? ")

এরপর, আমরা এই দুটি ভ্যালু একসাথে গুন করি। এটি আমাদের বলে দেবে একটি নির্দিষ্ট দিনে জাম স্কোনস থেকে কত টাকা উপার্জন হয়েছে:

earned_from_scones = jam_scone * sold

এখন যেহেতু আমরা জানি স্কোনস থেকে কত উপার্জন হয়েছে, আমরা একটি print() স্টেটমেন্ট লিখব যা আমাদের ক্যালকুলেশন এর ফলাফল ইউজারকে জানাবে:

print("You earned ${} from selling scones.".format(earned_from_scones))

format() মেথড আমাদের কর্লি ব্রেস ({}) যেখানে আমাদের স্ট্রিংয়ে থাকে সেখানে "earned_from_scones" এর ভ্যালু যোগ করতে দেয়।

আমাদের প্রতিটি স্কোনসে কত প্রফিট হয় সেটিও ক্যালকুলেট করতে হবে। আমরা জানি প্রতিটি স্কোনসে ২৫ সেন্ট প্রফিট হয়। প্রফিট কত হয়েছে ক্যালকুলেট করতে আমরা এই কোড ব্যবহার করি:

profit = sold * 0.25
print("You made a ${} profit from selling scones.".format(profit))

এই কোড প্রতিটি স্কোনস থেকে কত প্রফিট হয়েছে ক্যালকুলেট করে এবং সেই ভ্যালু কনসোলে প্রিন্ট করে। আমাদের কোড রান করি এবং দেখি কাজ করছে কিনা:

How many jam scones did you sell yesterday? 17
Traceback (most recent call last):
  File "main.py", line 4, in 
    earned_from_scones = jam_scone * sold
TypeError: can't multiply sequence by non-int of type 'str'

আমাদের কোড একটি এরর রিটার্ন করে।

সমাধান

আমাদের এরর থেকে লাইন কোডটি анаলাইজ করি:

earned_from_scones = jam_scone * sold

যদিও কোড লাইনটি ঠিক মনে হয়, একটি সমস্যা রয়েছে: আমরা দুটি স্ট্রিং ভ্যালু একসাথে গুন করার চেষ্টা করছি। আমরা "jam_scone" স্ট্রিং হিসেবে সংরক্ষণ করেছি। input() মেথড একটি স্ট্রিং রিটার্ন করে যার মানে sold()-এর স্ট্রিং ভ্যালু রয়েছে।

এই সমস্যা সমাধান করতে, আমাদের নিশ্চিত করতে হবে "jam_scone" এবং "sold" উভয় ফ্লোটিং পয়েন্ট। এটি আমাদের এই ভ্যালুগুলোর ওপর ম্যাথম্যাটিক্যাল অপারেশন পারফর্ম করতে দেবে।

এরপর, আমরা এই ভ্যারিয়েবলগুলোর ভ্যালু ডিক্লেয়ার করার পদ্ধতি পরিবর্তন করি:

jam_scone = 1.95
sold = float(input("How many jam scones did you sell yesterday? "))

"jam_scone"-এর ভ্যালু আর কোটেশন মার্কে নেই। এটি দেখাচ্ছে আমরা "jam_scone"-কে স্ট্রিং থেকে ফ্লোটে পরিবর্তন করেছি। আমরা float() মেথডও ব্যবহার করেছি "sold"-এর ভ্যালু ফ্লোটিং-পয়েন্ট নম্বরে কনভার্ট করতে।

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

How many jam scones did you sell yesterday? 17
You earned $33.15 from selling scones.
You made a $4.25 profit from selling scones.

আমাদের কোড সফলভাবে কাজ করে। প্রথমে, আমাদের কোড ইউজারকে কনসোলে কত স্কোনস বিক্রি হয়েছে সেটি ইনসার্ট করতে বলে। এরপর, আমাদের প্রোগ্রাম ক্যালকুলেট করে স্টোরটি স্কোনস বিক্রি করে কত টাকা উপার্জন করেছে। শেষে, আমাদের প্রোগ্রাম স্কোনস সেলস থেকে জেনারেটেড প্রফিট ক্যালকুলেট করে।

উপসংহার

"TypeError: can't multiply sequence by non-int of type 'str'" এরর ঘটে যদি আপনি দুটি স্ট্রিং ভ্যালু একসাথে গুন করার চেষ্টা করেন। আপনি এই সমস্যা ফিক্স করতে পারেন নিশ্চিত করে যে আপনি হয় দুটি নিউমেরিক্যাল ভ্যালু একসাথে গুন করছেন অথবা আপনি শুধু একটি স্ট্রিং ইন্টিজার দিয়ে গুন করছেন।

এখন আপনি এই এরর পাইথনিস্টার মত সমাধান করার জন্য প্রস্তুত!

  1. পাইথনে সিকোয়েন্স ডেটা টাইপ কী?

  2. পাইথনে স্ট্রিং-এ সবচেয়ে লম্বা পুনরাবৃত্তিমূলক সিকোয়েন্স খুঁজে বের করা

  3. পাইথনে ভেরিয়েবল স্ট্রিং টাইপের কিনা যাচাই করা

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