چالش روزانه · ۲۲ مهر ۱۴۰۵

چالش پایتون ۱۱: عوض کردن متغیر حلقه

قبل از اجرای کد، خروجی آن را پیش‌بینی کن. حدس نزن؛ خط به خط فکر کن پایتون چه می‌کند.

for i in range(3):
    print(i, end=" ")
    i = 10
خروجی این کد چیست؟

نمایش پاسخ و توضیح

پاسخ درست: گزینهٔ ب — 0 1 2

گام به گام

حلقهٔ for در پایتون شمارنده‌ای ندارد که با i کنترل شود. range(3) دنبالهٔ 0, 1, 2 را می‌دهد و for در هر دور، عضو بعدی را از همان دنباله برمی‌دارد و در i می‌گذارد.

  • دور اول: i می‌شود 0، چاپ می‌شود، بعد i = 10. اما این فقط متغیر i را عوض می‌کند، نه جای ما در range را.
  • دور دوم: for عضو بعدی، یعنی 1، را در i می‌گذارد و 10 بی‌اثر از بین می‌رود.
  • دور سوم: همین‌طور با 2.

جواب: 0 1 2

خودتان ببینید

for i in range(3):
    print("اول دور:", i)
    i = 10
    print("آخر دور:", i)

اگر واقعاً می‌خواهید زودتر بیرون بیایید

در زبان‌هایی مثل C یا جاوا، for (i = 0; i < 3; i++) با خود i کنترل می‌شود و عوض کردنش حلقه را جابه‌جا می‌کند. در پایتون نه. برای خروج زودهنگام از break استفاده کنید. اگر واقعاً می‌خواهید شمارنده را دستی کنترل کنید، while بنویسید:

i = 0
while i < 3:
    print(i, end=" ")
    i = 10          # اینجا واقعاً حلقه تمام می‌شود

نکتهٔ کاربردی: عوض کردن متغیر حلقهٔ for روی تعداد دورها اثری ندارد. پس اگر چنین خطی در کدتان دیدید، احتمالاً منظورتان break بوده. (درس حلقهٔ for · درس حلقهٔ while)

حالا خودت اجرا کن و تغییرش بده

for i in range(3):
    print(i, end=" ")
    i = 10