পাইথনে স্ট্রিং ম্যানিপুলেট করার অনেক পদ্ধতি রয়েছে। যদি একটি কোড চ্যালেঞ্জে আপনাকে পাইথনে একটি স্ট্রিংয়ের প্রথম অক্ষর ক্যাপিটালাইজ করতে বলা হয়, তবে আপনি কীভাবে করবেন? এই আর্টিকেলে সেই লক্ষ্য পূরণের একটি উপায় নিয়ে আলোচনা করা হয়েছে।
প্রম্পট
একটি পাইথন স্ট্রিং দেওয়া আছে, একটি ফাংশন লিখুন যা প্রথম অক্ষরটি ক্যাপিটালাইজ করে এবং ফেরত দেবে।
স্পষ্টীকরণ প্রশ্ন জিজ্ঞাসা
এই প্রম্পটটি একটি জব ইন্টারভিউতে দেওয়া হয়ে থাকতে পারে। সেক্ষেত্রে, ইন্টারভিউয়ার থেকে স্পষ্টীকরণ চেয়ে নিশ্চিত হন যে আপনি সমস্যাটি বুঝতে পেরেছেন।
সমস্যাটি সমাধান করার আগে আপনার মনে আসতে পারে কিছু প্রশ্ন:
- প্রশ্ন: স্ট্রিংটি কি সবসময় উপস্থিত থাকবে? কি আমাকে কখনও null বা খালি স্ট্রিং হ্যান্ডেল করতে হবে না?
- উত্তর: স্ট্রিং সবসময় উপস্থিত থাকবে না। এই এজ কেসগুলো মাথায় রাখা ভালো!
- প্রশ্ন: প্রথম অক্ষর। এটা কি শুধু স্ট্রিংয়ের প্রথম অক্ষর নাকি স্ট্রিংয়ের প্রতিটি শব্দের প্রথম অক্ষর? আপনি কীভাবে সংজ্ঞায়িত করতে চান?
- উত্তর: স্ট্রিংয়ের প্রথম অক্ষর।
- প্রশ্ন: কি প্রথম ক্যারেক্টার সবসময় একটি অক্ষর হবে? কি আমাকে এমন কেস হ্যান্ডেল করতে হবে যেখানে স্ট্রিংয়ের প্রথম ক্যারেক্টার নম্বর হতে পারে?
- উত্তর: ভালো ক্যাচ। প্রথম অক্ষর সবসময় স্ট্রিংয়ের প্রথম ক্যারেক্টার নাও হতে পারে। আমি চাই আপনি স্ট্রিংয়ের প্রথম অক্ষরটি ক্যাপিটালাইজ করুন।
অ্যাপ্রোচ
এই সমস্যাটি সমাধানের একাধিক উপায় রয়েছে। একাধিক সঠিক উপায় থাকতে পারে। আপনি যদি অন্য উপায় খুঁজে পান, চমৎকার!
প্রথমে এজ কেস হ্যান্ডেল করুন যদি বলা হয়।
এখানে, আমাদের হ্যান্ডেল করতে হবে যে কেসগুলো যেখানে স্ট্রিং নেই, খালি স্ট্রিং, বা প্রথম ক্যারেক্টার অক্ষর নয়। এখন সেটি কোড করি:
def capitalize_str(str):
if str == None: # যদি str None হয়
return "NoneType is not a string"
elif len(str) > 0: # যদি str এক্সিস্ট করে
# প্রথম ক্যারেক্টার কী টাইপ? নম্বর হলে পরবর্তী অক্ষরে যান, অক্ষর হলে ক্যাপিটালাইজ করুন।
return str #এটি টেম্পোরারি — পরবর্তী স্টেপে পরিবর্তন করব।
else: # যদি str খালি হয়
return "undefined string"
capitalize_str("hello")
এখানে, আমরা স্ট্রিং None হলে বা দৈর্ঘ্য ০ হলে সেসব এজ কেস হ্যান্ডেল করেছি। আমরা এখনো ক্যাপিটালাইজড লেটারের সাথে স্ট্রিং ফেরত দেওয়ার লজিক করিনি। আমাদের প্রথম নিশ্চিত করতে হবে স্ট্রিং এক্সিস্ট করে।
চলুন দেখি কীভাবে চেক করব প্রথম ক্যারেক্টার অক্ষর কিনা। যদি সেটি নম্বর বা স্পেশাল ক্যারেক্টার হয়, তবে আমাদের পরবর্তী ক্যারেক্টারে যেতে হবে যতক্ষণ না প্রথম অক্ষর পাওয়া যায়। যদি সেটি অক্ষর হয়, তবে আমরা সেটি ক্যাপিটালাইজ করব এবং ক্যাপিটালাইজড লেটারের সাথে স্ট্রিং ফেরত দেব। যদি আমরা স্ট্রিংয়ের শেষে পৌঁছাই এবং কোনো অক্ষর না পাই, তবে সেটি বলব।
def capitalize_str(str):
if str == None: # যদি str None হয়
return "NoneType is not a string"
elif len(str) > 0: # যদি str এক্সিস্ট করে
# প্রথম ক্যারেক্টার কী টাইপ? নম্বর হলে পরবর্তী অক্ষরে যান, অক্ষর হলে ক্যাপিটালাইজ করুন।
i = 0
while i < len(str):
if str[i].isalpha():
return str[0:i] + str[i].upper() + str[i + 1:]
else:
i += 1
return "string does not have letters"
else: # যদি str খালি হয়
return "undefined string"
print(capitalize_str("christina"))
পাইথনে থাকা স্ট্রিং মেথডগুলোর একটি হলো isalpha()। এটি চেক করে যে একটি ক্যারেক্টার অ্যালফাবেটের অংশ কিনা। যদি না হয়, তবে এটি পরবর্তী অক্ষরে চলে যায়। প্রথম অক্ষর ক্যারেক্টার পাওয়া যাওয়ার সাথে সাথে, আমরা স্ট্রিংয়ের বাম দিক, আপারকেস লেটার, এবং স্ট্রিংয়ের বাকি অংশের ক্যাটেনেশন ফেরত দিব।
পাইথন capitalize() ফাংশনটি আছে যা কাজ করে কারণ এটি প্রথম ক্যারেক্টাকে আপারকেসে রূপান্তর করে, কিন্তু এটি সেটি হ্যান্ডেল করতে পারে না যেখানে প্রথম ক্যারেক্টার অক্ষর নয়। এটাই কারণ আমরা হয়ে লুপ ব্যবহার করছি এবং প্রথম অক্ষর পাওয়ার সাথে সাথে হয়ে লুপ ইরাদতন ব্রেক করছি।
উপসংহার
এটি কেবল এই কোড চ্যালেঞ্জ কাটানোর একটি উপায়! নিশ্চিতভাবে আরও অনেক উপায় রয়েছে যা এটার মতই ভালো (অথবা আরও ভালো) হতে পারে। লক্ষ্য হলো প্রশ্ন জিজ্ঞাসা শিখতে যদি প্রম্পটে অস্পষ্টতা থাকে এবং এজ কেস সম্পর্কে চিন্তা করা! আপনি যদি এটা করতে পারেন, তবে কোড চ্যালেঞ্জ পাস করতে পারবেন কোনো সমস্যা ছাড়া। শুভকামনা!