>>> range(1,11)
আপনি দেয়
[1,2,3,4,5,6,7,8,9,10]
কেন 1-11?
তারা কি কেবল এলোমেলোভাবে এটি করার সিদ্ধান্ত নিয়েছে বা এর কোনও মূল্য রয়েছে যা আমি দেখছি না?
range()
আরও অনেক বেশি
>>> range(1,11)
আপনি দেয়
[1,2,3,4,5,6,7,8,9,10]
কেন 1-11?
তারা কি কেবল এলোমেলোভাবে এটি করার সিদ্ধান্ত নিয়েছে বা এর কোনও মূল্য রয়েছে যা আমি দেখছি না?
range()
আরও অনেক বেশি
উত্তর:
কারণ কল করা আরও সাধারণ যেটি 10 টি সমান সমান উপাদান রয়েছে এমন range(0, 10)
রিটার্ন দেয় । মনে রাখবেন প্রোগ্রামাররা 0-ভিত্তিক সূচক পছন্দ করে।[0,1,2,3,4,5,6,7,8,9]
len(range(0, 10))
এছাড়াও, নিম্নলিখিত সাধারণ কোড স্নিপেট বিবেচনা করুন:
for i in range(len(li)):
pass
আপনি দেখতে পাচ্ছেন যে যদি range()
ঠিকঠাক দিকে যায় len(li)
তবে এটি সমস্যাযুক্ত হবে? প্রোগ্রামারকে স্পষ্টভাবে বিয়োগ করতে হবে ১। এটি প্রোগ্রামারদের for(int i = 0; i < 10; i++)
বেশি পছন্দ করা সাধারণ ট্রেন্ড অনুসরণ করে for(int i = 0; i <= 9; i++)
।
আপনি যদি ঘন ঘন 1 টির সাথে শুরুতে পরিসীমা কল করে থাকেন তবে আপনি নিজের ফাংশনটি সংজ্ঞায়িত করতে চাইতে পারেন:
>>> def range1(start, end):
... return range(start, end+1)
...
>>> range1(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
range(start, count)
?
range(10)
সমান range(0, 10)
।
range1
ধাপের চেয়ে আলাদা ধাপের রেঞ্জগুলির সাথে কাজ করবে না 1
।
for i in range(len(li)):
বরং এন্টিপ্যাটার্ন। এক ব্যবহার করা উচিত enumerate
।
যদিও এখানে কিছু দরকারী অ্যালগরিদমিক ব্যাখ্যা রয়েছে, তবে আমি মনে করি যে এটি কেন এইভাবে কাজ করে তা নিয়ে কিছু সাধারণ 'বাস্তব জীবন' যুক্তি যুক্ত করতে সহায়তা করতে পারে, যা তরুণ নবীনদের বিষয় প্রবর্তন করার সময় আমি দরকারী বলে মনে করেছি:
'পরিসীমা (1,10)' এর মতো কিছু নিয়ে বিভ্রান্তি দেখা দিতে পারে যে পরামিতিগুলির জুড়ি "শুরু এবং শেষ" উপস্থাপন করে।
এটি আসলে শুরু এবং "স্টপ"।
এখন, যদি এটি তখন "শেষ" মান হত তবে হ্যাঁ, আপনি আশা করতে পারেন যে এই সংখ্যাটি অনুক্রমের চূড়ান্ত প্রবেশ হিসাবে অন্তর্ভুক্ত করা হবে। তবে এটি "শেষ" নয়।
অন্যরা ভুল করে সেই পরামিতিটিকে "গণনা" হিসাবে ডাকে কারণ আপনি যদি কেবল 'রেঞ্জ (এন)' ব্যবহার করেন তবে অবশ্যই এটি 'এন' বার পুনরাবৃত্তি করে। আপনি শুরু করার প্যারামিটারটি যুক্ত করার পরে এই যুক্তিটি ভেঙে যায়।
সুতরাং মূল বিষয়টির নামটি মনে রাখা: " থামুন "। তার মানে এটি সেই বিন্দু যেখানে পৌঁছে গেলে পুনরাবৃত্তি অবিলম্বে বন্ধ হবে stop Point দফার পরে নয় ।
সুতরাং, "স্টার্ট" প্রকৃতপক্ষে অন্তর্ভুক্ত হওয়ার জন্য প্রথম মানটিকে উপস্থাপন করে, "স্টপ" মান পৌঁছানোর পরে এটি 'ব্রেক' হয় না বরং প্রক্রিয়া চালিয়ে যাওয়ার আগে 'ব্রেক' করে দেয়।
বাচ্চাদের কাছে এটি ব্যাখ্যা করার জন্য আমি যে একটি উপমা ব্যবহার করেছি তা হ'ল, হাস্যকরভাবে, এটি বাচ্চাদের চেয়ে ভাল আচরণ করা হয়! এটি অনুমিত হওয়ার পরে এটি থামছে না - এটি কী করছে তা শেষ না করেই তাত্ক্ষণিক থামে। (তারা এটি পেয়েছে;))
আর একটি উপমা - আপনি যখন গাড়ি চালান তখন আপনি কোনও স্টপ / ফলন / 'উপায়' চিহ্নটি পাস করেন না এবং এটি আপনার গাড়ীর পাশে বা পিছনে বসে বসে শেষ করেন। আপনি যখন থামবেন তখন প্রযুক্তিগতভাবে আপনি এখনও এটিতে পৌঁছাতে পারেন নি। এটি 'আপনার যাত্রায় যে জিনিসগুলি পেরিয়ে গেছে "এর মধ্যে অন্তর্ভুক্ত নয়।
আমি আশা করি এর মধ্যে কিছু পাইথনিটিস / পাইথোনাইটাসকে ব্যাখ্যা করতে সহায়তা করে!
এটা তোলে শূন্য ভিত্তিক ইন্ডেক্স এবং সঙ্গে একযোগে ভাল কাজ করে len()
। উদাহরণস্বরূপ, যদি আপনার তালিকায় 10 টি আইটেম থাকে x
তবে সেগুলি 0-9 নম্বরযুক্ত। range(len(x))
আপনাকে 0-9 দেয়।
অবশ্যই, লোকেরা আপনাকে বলবে এটি করা for item in x
বা for index, item in enumerate(x)
না করার চেয়ে বেশি পাইথোনিক for i in range(len(x))
।
স্লাইসিং সেভাবেও কাজ করে: foo[1:4]
আইটেমের 1-3- foo
(এই আইটেম 1 টি মাথায় রেখে আসলে শূন্য-ভিত্তিক সূচকের কারণে দ্বিতীয় আইটেম)। ধারাবাহিকতার জন্য, তাদের উভয়েরই একইভাবে কাজ করা উচিত।
আমি এটিকে মনে করি: "আপনি যে প্রথম সংখ্যাটি চান, তার পরে প্রথম নম্বরটি আপনি চান না ।" আপনি যদি 1-10 চান তবে প্রথম সংখ্যাটি আপনি চান না এটি 11, তাই এটি range(1, 11)
।
যদি এটি কোনও নির্দিষ্ট অ্যাপ্লিকেশনে জটিল হয়ে ওঠে তবে একটি সামান্য সহায়ক সহায়ক ফাংশন লিখতে যথেষ্ট সহজ যা সমাপ্তি সূচক এবং কলগুলিতে 1 যুক্ত করে range()
।
w = 'abc'; w[:] == w[0:len(w)]; w[:-1] == w[0:len(w)-1];
def full_range(start,stop): return range(start,stop+1) ## helper function
for index, item in enumerate(x)
বিভ্রান্তি এড়াতে গণনার উদাহরণটি পড়তে হবে
এটি বিভাজক রেঞ্জগুলির জন্যও কার্যকর; range(a,b)
বিভক্ত হতে পারে range(a, x)
এবং range(x, b)
যেখানে অন্তর্ভুক্তিক পরিসর সহ আপনি লিখতেও পারেন x-1
বা হয় x+1
। আপনার খুব কমই রেঞ্জগুলি বিভক্ত করার দরকার থাকলেও আপনি প্রায়শই তালিকাগুলি বিভক্ত করার ঝোঁক রাখেন, যা তালিকার টুকরো টুকরো করার একটি কারণ হ'ল l[a:b]
a-th উপাদানটি রয়েছে তবে বি-থিম নয় not তারপরে range
একই সম্পত্তি থাকা এটিকে সুন্দরভাবে সামঞ্জস্য করে।
ব্যাপ্তির দৈর্ঘ্য হ'ল শীর্ষ মানটি নীচের মান থেকে বিয়োগ করবে।
এটি এর মতো কিছু সাথে খুব মিল:
for (var i = 1; i < 11; i++) {
//i goes from 1 to 10 in here
}
সি-স্টাইলের ভাষায়।
রুবির সীমার মতো:
1...11 #this is a range from 1 to 10
তবে, রুবি বুঝতে পারে যে আপনি অনেক সময় টার্মিনাল মানটি অন্তর্ভুক্ত করতে চান এবং বিকল্প বাক্য গঠনটি সরবরাহ করেন:
1..10 #this is also a range from 1 to 10
1..10
বনাম কল্পনা করতে পারি1...10
যখন কোড পড়া মধ্যে পার্থক্য করা কঠিন হচ্ছে!
মূলত অজগর range(n)
পুনরুক্তিতেn
বারবার যা একচেটিয়া প্রকৃতির কারণ এটি মুদ্রিত হওয়ার পরে এটি সর্বশেষ মান দেয় না, আমরা একটি ফাংশন তৈরি করতে পারি যা অন্তর্ভুক্তি মান দেয় যার অর্থ এটি পরিসরে বর্ণিত সর্বশেষ মানটিও মুদ্রণ করবে।
def main():
for i in inclusive_range(25):
print(i, sep=" ")
def inclusive_range(*args):
numargs = len(args)
if numargs == 0:
raise TypeError("you need to write at least a value")
elif numargs == 1:
stop = args[0]
start = 0
step = 1
elif numargs == 2:
(start, stop) = args
step = 1
elif numargs == 3:
(start, stop, step) = args
else:
raise TypeError("Inclusive range was expected at most 3 arguments,got {}".format(numargs))
i = start
while i <= stop:
yield i
i += step
if __name__ == "__main__":
main()
কোডটি বিবেচনা করুন
for i in range(10):
print "You'll see this 10 times", i
ধারণাটি হ'ল আপনি দৈর্ঘ্যের একটি তালিকা পেয়েছেন y-x
যা আপনি পুনরাবৃত্তি করতে পারবেন (উপরে দেখবেন)।
ব্যাপ্তির জন্য পাইথন ডক্স পড়ুন - তারা লুপের পুনরাবৃত্তিকে প্রাথমিক ব্যবহারের জন্য বিবেচনা করে।
এটি অনেক ক্ষেত্রেই যুক্তিযুক্ত হতে আরও সুবিধাজনক।
মূলত, আমরা start
এবং এর মধ্যবর্তী ব্যবধান হিসাবে একটি পরিসরটি ভাবতে পারি end
। যদি start <= end
, তাদের মধ্যে বিরতি দৈর্ঘ্য হয় end - start
। যদি len
প্রকৃতপক্ষে দৈর্ঘ্য হিসাবে সংজ্ঞায়িত করা হয় তবে আপনার কাছে:
len(range(start, end)) == start - end
তবে, আমরা অন্তরটির দৈর্ঘ্য পরিমাপ করার পরিবর্তে পরিসরের অন্তর্ভুক্ত পূর্ণ সংখ্যাগুলি গণনা করি। উপরের সম্পত্তিটি সত্য রাখতে, আমাদের একটি শেষবিন্দু অন্তর্ভুক্ত করা উচিত এবং অন্যটি বাদ দেওয়া উচিত।
যোগ করার পদ্ধতি step
প্যারামিটার দৈর্ঘ্যের একটি ইউনিট চালু ভালো হয়। সেক্ষেত্রে, আপনি আশা করতেন
len(range(start, end, step)) == (start - end) / step
দৈর্ঘ্যের জন্য। গণনাটি পেতে, আপনি কেবল পূর্ণসংখ্যা বিভাগ ব্যবহার করেন।