সমস্যা
আপনাকে পাইথনে অপরিবর্তনীয় ডেটা স্ট্রাকচার বাস্তবায়ন করতে হবে।
পরিচয়..
অপরিবর্তনীয় ডেটা স্ট্রাকচারগুলি খুব সহজ যখন আপনি একই সময়ে সমান্তরাল প্রোগ্রামিংয়ে একাধিক ব্যক্তিকে ডেটার একটি অংশ পরিবর্তন করতে বাধা দিতে চান। পরিবর্তনযোগ্য ডেটা স্ট্রাকচার (যেমন অ্যারে) যে কোনো সময় পরিবর্তন করা যেতে পারে যখন অপরিবর্তনীয় ডেটা স্ট্রাকচার হতে পারে না।
কিভাবে করতে হবে..
আমি আপনাকে ধাপে ধাপে দেখাই কিভাবে অপরিবর্তনীয় এবং পরিবর্তনযোগ্য ডেটা স্ট্রাকচারের সাথে মোকাবিলা করতে হয়।
উদাহরণ
# ধাপ 01 - একটি পরিবর্তনযোগ্য অ্যারে তৈরি করুন। # একটি অ্যারেয়াতপ_প্লেয়ার্স সংজ্ঞায়িত করুন =['মারে', 'নাদাল', 'জোকোভিচ']মুদ্রণ(f" *** আমার অ্যারেতে আসল ডেটা হল - {atp_players}")প্রে>*** আমার অ্যারেতে আসল ডেটা হল -
['মারে', 'নাদাল', 'জোকোভিচ']
# মারে থেকে খেলোয়াড়ের নাম পরিবর্তন করে Federeratp_players[0] ='Federer'print(f" *** আমার অ্যারেতে সংশোধিত ডেটা হল - {atp_players}")*** আমার অ্যারেতে পরিবর্তিত ডেটা হল -
['ফেদেরার', 'নাদাল', 'জোকোভিচ']উপসংহার
আপনি এই অ্যারের একচেটিয়া ব্যবহারকারী হলে আমরা অ্যারের মান পরিবর্তন করতে সক্ষম হয়েছি যা কার্যকর হতে পারে। যাইহোক, রিয়েলটাইম প্রোডাকশনে একাধিক প্রোগ্রাম পরিবর্তনের জন্য এই অ্যারে ব্যবহার করতে পারে এবং এর ফলে অপ্রত্যাশিত ডেটা হতে পারে।
অন্যদিকে Tuples একটু ভিন্নভাবে আচরণ করে, নিচের উদাহরণটি দেখুন।
# ধাপ 02 - একটি Tupletry পরিবর্তন করার চেষ্টা করুন:atp_players_tuple =('Murray', 'Nadal', 'Jokovic')print(f" *** আমার টিপলে আসল ডেটা হল - {atp_players_tuple}")atp_players_tuple[0] ='Federer' Exception as error:print(f" *** ডেটা পরিবর্তন করার চেষ্টা করেছে কিন্তু শেষ হয়েছে - {error}")
*** আমার টিপলে আসল ডেটা হল - ('মারে', 'নাদাল', 'জোকোভিক')*** ডেটা পরিবর্তন করার চেষ্টা করা হয়েছে কিন্তু শেষ হয়েছে - 'টুপল' অবজেক্ট আইটেম অ্যাসাইনমেন্ট সমর্থন করে নাউপসংহার :
আপনি উপরে যা দেখেছেন তা হল, টিপলকে সংশোধন করা যায় না? তবে একটি ব্যতিক্রম আছে, যদি টিপলের সাথে অ্যারে থাকে তবে মান পরিবর্তন করা যেতে পারে।
atp_players_array_in_tuple =(['Murray'], ['Nadal'], ['Jokovic'])print(f" *** অ্যারে সহ আমার টিপলে আসল ডেটা হল - {atp_players_array_in_tuple}")atp_players_array_in_tuple][0][0 0] ='Federer'print(f" *** অ্যারে সহ আমার টিপলে সংশোধিত ডেটা হল - {atp_players_array_in_tuple}")
*** অ্যারে সহ আমার টিপলে আসল ডেটা হল - (['Murray'], ['Nadal'], ['Jokovic'])*** অ্যারে সহ আমার টিপলে পরিবর্তিত ডেটা হল - (['ফেদেরার' '], ['নাদাল'], ['জোকোভিচ'])তাহলে কিভাবে তথ্য রক্ষা করবেন? হুম, শুধু অ্যারেগুলিকে টিপলে রূপান্তর করে৷
৷try:atp_players_tuple_in_tuple =(('মারে'), ('নাদাল'), ('জোকোভিচ'))প্রিন্ট(f" *** আমার টিপলে আসল ডেটা হল - {atp_players_tuple_in_tuple}")atp_players_tuple_in_tuple[0] ='Federer' Exception as error:print(f" *** আমার টিপলে ডেটা পরিবর্তন করার চেষ্টা করেছি কিন্তু শেষ হয়েছে - {error}")
*** আমার টিপলে আসল ডেটা হল - ('মারে', 'নাদাল', 'জোকোভিক')*** আমার টিপলে ডেটা পরিবর্তন করার চেষ্টা করেছি কিন্তু শেষ হয়েছে - 'টুপল' অবজেক্ট আইটেম অ্যাসাইনমেন্ট সমর্থন করে নাপ্রে>আরো আছে.. পাইথনের একটি চমৎকার বিল্ট ইন টুল আছে যার নাম NamedTuple। এটি এমন একটি ক্লাস যা আপনি একটি কনস্ট্রাক্টর তৈরি করতে প্রসারিত করতে পারেন। আসুন আমরা প্রোগ্রামগতভাবে বুঝতে পারি।
# pythons way.class GrandSlamsPythonWay:def __init__(self, player, titles):self.player =playerself.titles =titlesstats =GrandSlamsPythonWay("Federer", 20)print(f" *** পরিসংখ্যানের বিবরণ আছে {stats.player} - {stats.titles}")
*** পরিসংখ্যানে ফেদেরার - 20 হিসাবে বিশদ বিবরণ রয়েছেএই শ্রেণী সম্পর্কে আপনি কি মনে করেন, এটা কি অপরিবর্তনীয়? ফেদেরারকে নাদালে পরিবর্তন করে এটি পরীক্ষা করা যাক।
stats.player ='Nadal'print(f" *** পরিসংখ্যানের বিবরণ আছে {stats.player} - {stats.titles}")
*** পরিসংখ্যানের বিবরণ আছে নাদাল - 20তাই অবাক হওয়ার কিছু নেই এটি একটি অপরিবর্তনীয় ডেটা স্ট্রাকচার কারণ আমরা ফেদেরারকে নাদালে আপডেট করতে সক্ষম হয়েছি। এখন আমরা NamedTuple দিয়ে একটি ক্লাস তৈরি করি এবং দেখি এটির ডিফল্ট আচরণ কি।
ইম্পোর্ট NamedTupleclass GrandSlamsWithNamedTuple(NamedTuple):player:strttitles:intstats =GrandSlamsWithNamedTuple("Federer", 20)print(f" *** পরিসংখ্যানের বিবরণ {stats.player} - {stats}) হিসাবে আছে। stats.player ='জোকোভিচ'প্রিন্ট(f" *** পরিসংখ্যানের বিবরণ আছে {stats.player} - {stats.titles}")
*** পরিসংখ্যানে ফেদেরার - 20 হিসাবে বিশদ বিবরণ রয়েছে<পূর্ব>------------------------------------------------------------ ----------------------------AttributeError Traceback (সর্বশেষ সাম্প্রতিক কল শেষ) in10 print(f" *** পরিসংখ্যানের বিবরণ আছে {পরিসংখ্যান হিসাবে .player} - {stats.titles}")11---> 12 stats.player ='Jokovic'13 print(f" *** পরিসংখ্যানের বিবরণ {stats.player} - {stats.titles}")AttributeError হিসাবে আছে :অ্যাট্রিবিউট সেট করতে পারে না
মনে হচ্ছে ২০টি গ্র্যান্ডস্লাম শিরোপা পেতে জোকোভিচকে আরও কিছু সময় অপেক্ষা করতে হবে।
যাইহোক, আমরা _replace পদ্ধতি ব্যবহার করে একটি কপি তৈরি করতে পারি এবং _replace এর সময় মান আপডেট করতে পারি।
djokovic_stats =stats._replace(player="Djokovic", titles=17)print(f" *** djokovic_stats এর বিবরণ আছে {djokovic_stats.player} - {djokovic_stats.titles}")
*** djokovic_stats-এ জোকোভিচ - 17 হিসাবে বিশদ বিবরণ রয়েছেউদাহরণ
অবশেষে আমি একটি উদাহরণ দেব যা উপরে বর্ণিত সমস্ত কিছুকে কভার করে।
এই উদাহরণের জন্য, ভান করুন আমরা সবজির দোকানের জন্য সফ্টওয়্যার লিখছি।
ইম্পোর্ট Tuple# টাইপ করার থেকে একটি ক্রয়ক্লাস মূল্য (NamedTuple):আইডি:intname:strprice:int # ডলারে মূল্য # ক্রয়ক্লাস ক্রয় (NamedTuple) ট্র্যাক করতে একটি ক্লাস তৈরি করুন:purchase_id:intitems:Tuple[ দাম # সবজি আইটেম তৈরি করুন এবং তাদের সাথে সম্পর্কিত দাম গাজর =দাম(1, "গাজর", 2)টমেটো =দাম(2, "টমেটো", 3)বেগুন =দাম(3, "বেগুন", 5)# এখন বলি আমাদের প্রথম ক্রেতা মিঃ টম গাজর এবং টম্যাটোটম_অর্ডার কিনেছিলেন =ক্রয়(1, (গাজর, টমেটো))# আমাদের মোট কত খরচ করতে হবে তা জানুন Mr.Tomtotal_cost =যোগফল(tom_order.items-এ আইটেমের জন্য আইটেম মূল্য) প্রিন্ট(f" *** Mr.Tom থেকে মোট খরচ হল - {total_cost}$")আউটপুট
*** মিঃ টম থেকে মোট খরচ হল - 5$