পাইথনে নিম্নলিখিত কোডটি আইনী বলে আমি লক্ষ্য করেছি। আমার প্রশ্ন কেন? একটি নির্দিষ্ট কারণ আছে?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
after:
।
পাইথনে নিম্নলিখিত কোডটি আইনী বলে আমি লক্ষ্য করেছি। আমার প্রশ্ন কেন? একটি নির্দিষ্ট কারণ আছে?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
after:
।
উত্তর:
else
যখন আপনার while
শর্তটি মিথ্যা হয়ে যায় তখনই এই ধারাটি কার্যকর করা হয় । আপনি যদিbreak
লুপ থেকে বাইরে চলে যান বা কোনও ব্যতিক্রম উত্থাপিত হয় তবে তা কার্যকর করা হবে না।
এটির বিষয়ে চিন্তা করার এক উপায় হ'ল যদি / অন্যটি শর্তের সাথে সম্মত হয়:
if condition:
handle_true()
else:
handle_false()
লুপিং নির্মাণের সাথে সাদৃশ্যপূর্ণ:
while condition:
handle_true()
else:
# condition is false now, handle and go on with the rest of the program
handle_false()
উদাহরণটি এই লাইনের সাথে থাকতে পারে:
while value < threshold:
if not process_acceptable_value(value):
# something went wrong, exit the loop; don't pass go, don't collect 200
break
value = update(value)
else:
# value >= threshold; pass go, collect 200
handle_threshold_reached()
while {} something
ব্যতীত যে something
আপনি এড়ানো হবে break
মধ্যে while
লুপ।
else
লুপের শর্তটিকে আঘাত করে বা একটি চেষ্টা ব্লকের নীচে পড়ে গিয়ে আপনি যদি কোনও ব্লকটি স্বাভাবিকভাবে প্রস্থান করেন তবে এই ধারাটি কার্যকর করা হবে। এটি কার্যকর করা হয় না যদি আপনি break
বা return
কোনও ব্লক বাইরে থাকেন বা ব্যতিক্রম উত্থাপন করেন। এটি কেবল যখন এবং লুপগুলির জন্যই নয়, তবে ব্লকগুলি চেষ্টা করে।
আপনি সাধারণত এটি সেই জায়গাগুলিতে সন্ধান করেন যেখানে সাধারণত আপনি খুব শীঘ্রই একটি লুপ থেকে বেরিয়ে আসতেন এবং লুপের শেষের দিকে ছুটে যাওয়া কোনও অপ্রত্যাশিত / অস্বাভাবিক ঘটনা। উদাহরণস্বরূপ, আপনি যদি কোনও তালিকার কোনও মানটি খুঁজছেন তবে:
for value in values:
if value == 5:
print "Found it!"
break
else:
print "Nowhere to be found. :-("
found_it=False
লুপের শুরুতে আমি কতবার রেখেছি তা জানেন না , এবং তারপরে found_it
শেষে যদি একটি চেক করেন
এর উত্তরে Is there a specific reason?
, এখানে একটি আকর্ষণীয় অ্যাপ্লিকেশন: একাধিক স্তরের লুপিং ভেঙে দেওয়া।
এটি এখানে কীভাবে কাজ করে তা হল: বাইরের লুপটির শেষে একটি বিরতি রয়েছে, সুতরাং এটি কেবল একবার কার্যকর করা হবে। তবে, যদি অভ্যন্তরীণ লুপটি সম্পূর্ণ করে (কোনও বিভাজক খুঁজে পায় না), তবে এটি অন্য বিবৃতিতে পৌঁছে যায় এবং বাইরের বিরতি কখনই পৌঁছায় না। এইভাবে, অভ্যন্তরীণ লুপের একটি বিরতি কেবল একটি না হয়ে উভয় লুপকে ভেঙে ফেলবে।
for k in [2, 3, 5, 7, 11, 13, 17, 25]:
for m in range(2, 10):
if k == m:
continue
print 'trying %s %% %s' % (k, m)
if k % m == 0:
print 'found a divisor: %d %% %d; breaking out of loop' % (k, m)
break
else:
continue
print 'breaking another level of loop'
break
else:
print 'no divisor could be found!'
উভয় while
এবং for
লুপগুলির জন্য, else
বিবৃতিটি শেষ পর্যন্ত কার্যকর করা হয়, যদি না হয়break
ব্যবহৃত হয়।
বেশিরভাগ ক্ষেত্রে এটি করার আরও ভাল উপায় রয়েছে (এটি কোনও ফাংশনে আবৃত করা বা একটি ব্যতিক্রম উত্থাপন), তবে এটি কার্যকর!
অন্য শর্তটি কার্যকর করা হয় যখন যখন শর্তটি মিথ্যাতে মূল্যায়ন করে।
ডকুমেন্টেশন থেকে :
মতামতটি যতক্ষণ সত্য প্রকাশিত হয় ততক্ষণ পুনরাবৃত্তি কার্যকর করার জন্য ব্যবহৃত হয়:
while_stmt ::= "while" expression ":" suite ["else" ":" suite]
এটি বারবার অভিব্যক্তি পরীক্ষা করে এবং, যদি এটি সত্য হয় তবে প্রথম স্যুটটি কার্যকর করে; যদি অভিব্যক্তিটি মিথ্যা হয় (যা প্রথমবার এটি পরীক্ষিত হতে পারে)
else
ক্লজের স্যুট , যদি উপস্থিত থাকে তবে কার্যকর হয় এবং লুপটি বন্ধ হয়।
break
প্রথম স্যুটটিতে কার্যকর করা একটি বিবৃতিelse
ক্লজের স্যুটটি কার্যকর না করে লুপটি সমাপ্ত করে ।continue
প্রথম স্যুটটিতে মৃত্যুদন্ড কার্যকর করা একটি বিবৃতি বাকী স্যুটকে এড়িয়ে যায় এবং অভিব্যক্তিটি পরীক্ষা করতে ফিরে যায়।
আমার উত্তরটি যখন আমরা / অন্যদিকে ব্যবহার করতে পারি তখন ফোকাস করবে।
প্রথম নজরে, মনে হয় ব্যবহার করার সময় আলাদা কিছু নেই
while CONDITION:
EXPRESSIONS
print 'ELSE'
print 'The next statement'
এবং
while CONDITION:
EXPRESSIONS
else:
print 'ELSE'
print 'The next statement'
কারণ print 'ELSE'
বিবৃতি সর্বদা উভয় ক্ষেত্রেই কার্যকর করা হয় বলে মনে হয় ( while
লুপ শেষ হয়ে গেলে বা না চালানো উভয়ই )।
তারপরে, যখন স্টেটমেন্টটি print 'ELSE'
কার্যকর হবে না তখনই এটি আলাদা । এটি যখন break
কোড ব্লকের অভ্যন্তরে থাকেwhile
In [17]: i = 0
In [18]: while i < 5:
print i
if i == 2:
break
i = i +1
else:
print 'ELSE'
print 'The next statement'
....:
0
1
2
The next statement
যদি ভিন্ন হয়:
In [19]: i = 0
In [20]: while i < 5:
print i
if i == 2:
break
i = i +1
print 'ELSE'
print 'The next statement'
....:
0
1
2
ELSE
The next statement
return
এই বিভাগে নেই, কারণ এটি উপরের দুটি ক্ষেত্রে একই প্রভাব ফেলে।
ব্যতিক্রম উত্থাপনও তফাত সৃষ্টি করে না, কারণ যখন এটি উত্থাপিত হয়, যেখানে পরবর্তী কোডটি কার্যকর করা হবে ব্যতিক্রম হ্যান্ডলার (ব্লক ব্যতীত), else
ক্লজ বা ডান পরে ডানদিকে কোড while
কার্যকর করা হবে না।
আমি জানি এটি পুরানো প্রশ্ন তবে ...
রেমন্ড হেটেঞ্জার যেমন বলেছিলেন, তার while/no_break
পরিবর্তে এটি কল করা উচিত while/else
।
আপনি যদি এই স্নিপেটটি দেখেন তবে আমি আন্ডারট্যান্ড করা সহজ।
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
if n == 0:
print n
লুপের পরে শর্তটি যাচাই করার পরিবর্তে আমরা এটিকে অদলবদল করতে পারি else
এবং সেই চেকটি থেকে মুক্তি পেতে পারি।
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
else: # read it as "no_break"
print n
while/no_break
কোডটি বোঝার জন্য আমি সর্বদা এটি পড়েছি এবং সেই বাক্য গঠনটি আমার কাছে আরও বেশি অর্থবোধ করে।
অন্য শর্তটি কেবল তখনই কার্যকর করা হয় যখন যখন শর্তটি মিথ্যা হয়ে যায়।
এখানে কিছু উদাহরন:
উদাহরণ 1: প্রাথমিকভাবে শর্তটি মিথ্যা, সুতরাং অন্য-ধারাটি কার্যকর করা হয়।
i = 99999999
while i < 5:
print(i)
i += 1
else:
print('this')
আউটপুট:
this
উদাহরণ 2: যখন-শর্ত i < 5
কখনো মিথ্যা কারণ হয়ে ওঠে i == 3
বিরতি লুপ, তাই অন্য-দফা মৃত্যুদন্ড কার্যকর করা হয় নি।
i = 0
while i < 5:
print(i)
if i == 3:
break
i += 1
else:
print('this')
আউটপুট:
0
1
2
3
উদাহরণ 3: যখন-শর্ত i < 5
মিথ্যা যখন ওঠে i
ছিল 5
, তাই আর-দফা মৃত্যুদন্ড কার্যকর করা হয়।
i = 0
while i < 5:
print(i)
i += 1
else:
print('this')
আউটপুট:
0
1
2
3
4
this
else:
বিবৃতি কার্যকর কখন এবং শুধুমাত্র যখন লুপ আর তার শর্ত পূরণ করে (আপনার উদাহরণে, যখন n != 0
মিথ্যা)।
সুতরাং আউটপুট এই হবে:
5
4
3
2
1
what the...
লুপটি না ভেঙে গেলে অন্যটি কার্যকর করা হয়।
আমি 'রানার' রূপক দিয়ে এটি ভাবতে চাই।
"অন্য" হ'ল ফিনিস লাইনটি পার হওয়ার মতো, আপনি ট্র্যাকের শুরুতে বা শেষে শুরু করেছিলেন কিনা তা অপ্রাসঙ্গিক। "অন্যথায়" কেবলমাত্র কার্যকর করা হয় না যদি আপনি এর মধ্যে কোথাও ভেঙে যান।
runner_at = 0 # or 10 makes no difference, if unlucky_sector is not 0-10
unlucky_sector = 6
while runner_at < 10:
print("Runner at: ", runner_at)
if runner_at == unlucky_sector:
print("Runner fell and broke his foot. Will not reach finish.")
break
runner_at += 1
else:
print("Runner has finished the race!") # Not executed if runner broke his foot.
প্রধান ব্যবহারের কেসগুলি নেস্টেড লুপগুলি এই ব্রেকিং ব্যবহার করে বা লুপটি কোথাও না ভেঙে যদি আপনি কিছু বিবৃতি চালাতে চান তবে (ভাঙ্গাটিকে অস্বাভাবিক পরিস্থিতি বলে ভাবেন)।
উদাহরণস্বরূপ, ভেরিয়েবলগুলি ব্যবহার না করে কীভাবে অভ্যন্তরীণ লুপটি ভেঙে ফেলা যায় বা চেষ্টা / ধরার চেষ্টা করা যায় তার একটি পদ্ধতি নীচে দেওয়া আছে:
for i in [1,2,3]:
for j in ['a', 'unlucky', 'c']:
print(i, j)
if j == 'unlucky':
break
else:
continue # Only executed if inner loop didn't break.
break # This is only reached if inner loop 'breaked' out since continue didn't run.
print("Finished")
# 1 a
# 1 b
# Finished
'যখন: অন্যথায়:' পাইথনের নির্মাণ আরও ভাল হবে যদি 'লুপটি কার্যকর না করা হয় তবে' অন্য 'বিবৃতি কার্যকর করা হয়। এটি আজ যেভাবে কাজ করে তা বোঝায় না কারণ আপনি একই ফলাফলের সাথে নীচের কোডটি ব্যবহার করতে পারেন ...
n = 5
while n != 0:
print n
n -= 1
print "what the..."
else
আপনি break
বা return
কীওয়ার্ড ব্যবহার করে লুপ ছেড়ে দিলে ব্লকটি কার্যকর করা হবে না । আপনার উদাহরণে, print
লুপটি break
কমান্ডটি শেষ হয়ে গেলেও কার্যকর করা হবে ।
এটি সামাজিক মিথস্ক্রিয়া জন্য দরকারী।
while (Date != "January 1st"):
time.sleep(1)
else:
print("Happy new year!")
else
? কোডটি এটিকে ছাড়াই ঠিক একই কাজ করে।
break
গণনা চলাকালীন আপনার ঘড়ি এবং ক্যালেন্ডার , ব্যবহার না করা else
আপনাকে "নতুন বছরের শুভ শুভ!" তাত্ক্ষণিকভাবে যা কোনও ধারণা রাখে না।
break
" থাকে তবে আপনার অর্থ কী ? সেখানে নেই break
কোডে।
else
এই ব্যবহারের জন্য শব্দটির পছন্দটি একটি উল্লেখযোগ্যভাবে খারাপ ধারণা ছিল এবং তারা এর থেকে আর কিছুই করবে না।