حلقه while در پایتون
جلسه چهارم - حلقه while در پایتون
مرجع کامل: تعریف، شرط، while True، break و continue - کدها قابل کپی هستند.
تعریف while
در برنامهنویسی، حلقهی while یکی از ساختارهای تکرار (loop structure) است
که اجازه میدهد یک بخش از کد چندین بار اجرا شود، تا زمانی که یک شرط منطقی (Boolean condition) برقرار
باشد.
یعنی اجرای بلوک دستورات داخل حلقه وابسته به نتیجهی شرطی است که قبل از هر بار تکرار بررسی میشود.
- اگر شرط مقدار
Trueداشته باشد، دستورات داخل حلقه اجرا میشوند. - اگر شرط
Falseشود، اجرای حلقه متوقف میشود و برنامه به خط بعد از حلقه میرود.
while condition:
statements
تا زمانی که شرط برقرار است، دستورات اجرا میشود.
نکات مهم درباره شرط در while
1. شرط باید Boolean باشه
شرط باید عبارتی باشه که نتیجهاش True یا False باشه.
2. اجرای حلقه وابسته به True بودن شرط
بدنه حلقه تنها وقتی اجرا میشود که شرط True باشه.
اگر شرط از ابتدا False باشه، حلقه حتی یک بار هم اجرا نمیشود.
3. تغییر مقدار متغیرهای شرط داخل حلقه مهمه
اگر متغیری که شرط به آن وابسته است تغییر نکند، حلقه ممکن است به حلقه بینهایت تبدیل شود.
4. شرط قبل از اجرای بدنه بررسی میشود
حلقه فقط وقتی وارد بدنه میشود که شرط True باشد.
برخلاف برخی زبانها، پایتون ابتدا بدنه را اجرا نمیکند.
مثالهای پایه
مثال: برنامهای بنویس که از ۱ تا ۵ عددها رو چاپ کنه
count = 1
while count <= 5:
print(count)
count += 1
# output:
# 1
# 2
# 3
# 4
# 5
مثال: برنامهای بنویس که تا زمانی که کاربر عدد مثبت وارد میکند، جمع اعدادش را حساب کند
total = 0
num = int(input("یک عدد وارد کن (برای خروج عدد منفی بزن): "))
while num >= 0:
total += num
num = int(input("عدد بعدی: "))
print("جمع کل =", total)
# output:
# یک عدد وارد کن (برای خروج عدد منفی بزن): 5
# عدد بعدی: 7
# عدد بعدی: 3
# عدد بعدی: -1
# جمع کل = 15
while True
وقتی در حلقه بنویسیم while True، یعنی شرط همیشه True است.
بنابراین حلقه به صورت بینهایت اجرا میشود مگر اینکه با دستورات خروج زودهنگام مثل break آن را متوقف کنیم.
این نوع حلقه به آنجا کاربرد دارد که تعداد تکرار از قبل مشخص نیست و نیاز به اجرای مداوم داریم، مثل گرفتن ورودی کاربر یا سرورهای برنامهنویسی.
نکات مهم درباره while True
1. حلقه بینهایت (Infinite Loop)
بدون استفاده از break یا تغییر شرط، حلقه هیچوقت متوقف نمیشود.
2. نیاز به شرط توقف داخلی
معمولاً داخل حلقه یک شرط با if و break قرار
میدهیم تا حلقه به صورت کنترلشده متوقف شود.
3. کاربردهای رایج
- دریافت مداوم ورودی کاربر تا زمان درست بودن
- اجرای برنامههای سرور یا Listener
- منوهای تکراری در برنامهها
4. کار با دستورات کنترلی
break- خروج کامل از حلقهcontinue- رد کردن ادامه دور فعلی و رفتن به دور بعد
5. مقایسه با حلقه شرطی معمولی
در حلقه شرطی معمولی، شرط در ابتدا بررسی میشود و ممکن است حلقه اصلاً اجرا نشود.
در while True حلقه همیشه وارد بدنه میشود و شرط توقف داخل حلقه تعیین
میشود.
مثالهای پیشرفته
مثال: برنامهای بنویسید که تعداد نامتناهی عدد دریافت کند و هرکدام را چک کند که آیا مثبت هست یا منفی و درصورتی که کاربر حرف q وارد کرد از برنامه خارج بشه
while True:
user_input = input("Enter a number (or 'q' to quit): ")
if user_input == 'q':
break
num = float(user_input)
if num > 0:
print("Positive")
elif num < 0:
print("Negative")
else:
print("Zero")
# output:
# Enter a number (or 'q' to quit): 5
# Positive
# Enter a number (or 'q' to quit): -3
# Negative
# Enter a number (or 'q' to quit): 0
# Zero
# Enter a number (or 'q' to quit): q
مثال: برنامهای بنویسید که تعداد نامتناهی عدد دریافت کند و بررسی کند هر عدد زوج یا فرد است
while True:
user_input = input("Enter a number (or 'q' to quit): ")
if user_input == 'q':
break
num = int(user_input)
if num % 2 == 0:
print("Even")
else:
print("Odd")
# output:
# Enter a number (or 'q' to quit): 4
# Even
# Enter a number (or 'q' to quit): 7
# Odd
# Enter a number (or 'q' to quit): 0
# Even
# Enter a number (or 'q' to quit): q
مثال: برنامهای بنویسید که تعداد نامتناهی عدد از کاربر دریافت کند و هر زمان کاربر کلمه average وارد کرد، میانگین اعداد وارد شده را محاسبه و نمایش دهد
total = 0
count = 0
while True:
user_input = input("Enter a number (or 'average' to calculate): ")
if user_input == 'average':
if count > 0:
print("Average:", total / count)
else:
print("No numbers entered.")
break
num = float(user_input)
total += num
count += 1
# output:
# Enter a number (or 'average' to calculate): 5
# Enter a number (or 'average' to calculate): 10
# Enter a number (or 'average' to calculate): 15
# Enter a number (or 'average' to calculate): average
# Average: 10.0
💡 تمرینها و سوالات
سوال 1: چاپ اعداد 1 تا 10
برنامهای بنویسید که با استفاده از حلقه while اعداد 1 تا 10 را چاپ کند.
# خروجی:
# 1
# 2
# ...
# 10
# راه حل:
i = 1
while i <= 10:
print(i)
i += 1
سوال 2: مجموع اعداد تا n
برنامهای بنویسید که عددی دریافت کند و با while مجموع اعداد 1 تا n را محاسبه کند.
# نمونه ورودی: 5
# خروجی: 15
# راه حل:
n = int(input("enter a number: "))
total = 0
i = 1
while i <= n:
total += i
i += 1
print(total)
سوال 3: فاکتوریل با while
برنامهای بنویسید که عددی دریافت کند و فاکتوریل آن را با حلقه while محاسبه کند.
# نمونه ورودی: 5
# خروجی: 120
# راه حل:
n = int(input("enter a number: "))
factorial = 1
i = 1
while i <= n:
factorial *= i
i += 1
print(factorial)
سوال 4: چاپ معکوس اعداد
برنامهای بنویسید که عددی دریافت کند و از آن عدد تا 1 را به صورت نزولی چاپ کند.
# نمونه ورودی: 5
# خروجی: 5 4 3 2 1
# راه حل:
n = int(input("enter a number: "))
while n >= 1:
print(n, end=" ")
n -= 1
سوال 5: حدس عدد
برنامهای بنویسید که از کاربر بخواهد عدد 7 را حدس بزند و تا زمانی که درست حدس نزند، مجدد بپرسد.
# نمونه اجرا:
# guess the number: 5
# wrong! try again
# guess the number: 7
# correct!
# راه حل:
guess = int(input("guess the number: "))
while guess != 7:
print("wrong! try again")
guess = int(input("guess the number: "))
print("correct!")
سوال 6: شمارش ارقام عدد
برنامهای بنویسید که عددی دریافت کند و تعداد ارقام آن را با while شمارش کند.
# نمونه ورودی: 12345
# خروجی: 5
# راه حل:
n = int(input("enter a number: "))
count = 0
while n > 0:
count += 1
n //= 10
print(count)
سوال 7: وارونه کردن عدد
برنامهای بنویسید که عددی دریافت کند و با while ارقام آن را وارونه کند.
# نمونه ورودی: 1234
# خروجی: 4321
# راه حل:
n = int(input("enter a number: "))
reversed_num = 0
while n > 0:
digit = n % 10
reversed_num = reversed_num * 10 + digit
n //= 10
print(reversed_num)
سوال 8: جدول ضرب با while
برنامهای بنویسید که عددی دریافت کند و جدول ضرب آن را تا 10 با while نمایش دهد.
# نمونه ورودی: 3
# خروجی:
# 3 x 1 = 3
# 3 x 2 = 6
# ...
# 3 x 10 = 30
# راه حل:
n = int(input("enter a number: "))
i = 1
while i <= 10:
print(f"{n} x {i} = {n * i}")
i += 1
سوال 9: اعداد زوج تا n
برنامهای بنویسید که عددی دریافت کند و تمام اعداد زوج از 0 تا آن عدد را با while چاپ کند.
# نمونه ورودی: 10
# خروجی: 0 2 4 6 8 10
# راه حل:
n = int(input("enter a number: "))
i = 0
while i <= n:
if i % 2 == 0:
print(i, end=" ")
i += 1
سوال 10: توان عدد
برنامهای بنویسید که دو عدد (پایه و توان) دریافت کند و با while توان را محاسبه کند.
# نمونه ورودی: base=2, power=3
# خروجی: 8 (2^3)
# راه حل:
base = int(input("enter base: "))
power = int(input("enter power: "))
result = 1
i = 0
while i < power:
result *= base
i += 1
print(result)
سوال 11: مجموع اعداد زوج تا n
برنامهای بنویسید که عددی دریافت کند و مجموع اعداد زوج از 1 تا آن عدد را محاسبه کند.
# نمونه ورودی: 10
# خروجی: 30 (2+4+6+8+10)
# راه حل:
n = int(input("enter a number: "))
total = 0
i = 1
while i <= n:
if i % 2 == 0:
total += i
i += 1
print(total)
سوال 12: بزرگترین رقم عدد
برنامهای بنویسید که عددی دریافت کند و بزرگترین رقم آن را با while پیدا کند.
# نمونه ورودی: 59342
# خروجی: 9
# راه حل:
n = int(input("enter a number: "))
max_digit = 0
while n > 0:
digit = n % 10
if digit > max_digit:
max_digit = digit
n //= 10
print(max_digit)
سوال 13: چک کردن عدد اول
برنامهای بنویسید که عددی دریافت کند و با while بررسی کند آیا عدد اول است یا خیر.
# نمونه ورودی: 7
# خروجی: prime
# نمونه ورودی: 8
# خروجی: not prime
# راه حل:
n = int(input("enter a number: "))
if n < 2:
print("not prime")
else:
is_prime = True
i = 2
while i < n:
if n % i == 0:
is_prime = False
break
i += 1
if is_prime:
print("prime")
else:
print("not prime")
سوال 14: دنباله فیبوناچی
برنامهای بنویسید که عددی n دریافت کند و n عدد اول دنباله فیبوناچی را با while چاپ کند.
# نمونه ورودی: 7
# خروجی: 0 1 1 2 3 5 8
# راه حل:
n = int(input("enter a number: "))
a, b = 0, 1
count = 0
while count < n:
print(a, end=" ")
a, b = b, a + b
count += 1
سوال 15: بزرگترین مقسوم علیه مشترک (GCD)
برنامهای بنویسید که دو عدد دریافت کند و با الگوریتم اقلیدس (Euclidean) و while بزرگترین مقسوم علیه مشترک را محاسبه کند.
# نمونه ورودی: 48, 18
# خروجی: 6
# راه حل:
a = int(input("enter first number: "))
b = int(input("enter second number: "))
while b != 0:
temp = b
b = a % b
a = temp
print(f"GCD: {a}")
سوال 16: منوی تکراری
برنامهای بنویسید که یک منو با گزینههای مختلف نمایش دهد و تا زمانی که کاربر exit وارد نکند، ادامه پیدا کند.
# منو:
# 1. Hello
# 2. Bye
# 3. Exit
# choose: 1
# Hello!
# choose: 3
# Goodbye!
# راه حل:
while True:
print("1. Hello")
print("2. Bye")
print("3. Exit")
choice = input("choose: ")
if choice == '1':
print("Hello!")
elif choice == '2':
print("Bye!")
elif choice == '3':
print("Goodbye!")
break
else:
print("Invalid choice")
سوال 17: شمارش اعداد مثبت و منفی
برنامهای بنویسید که به صورت مداوم عدد دریافت کند و تعداد اعداد مثبت و منفی را شمارش کند. با ورود 0 برنامه متوقف شود.
# نمونه اجرا:
# enter number: 5
# enter number: -3
# enter number: 7
# enter number: -2
# enter number: 0
# Positive: 2, Negative: 2
# راه حل:
positive = 0
negative = 0
while True:
num = int(input("enter number: "))
if num == 0:
break
elif num > 0:
positive += 1
else:
negative += 1
print(f"Positive: {positive}, Negative: {negative}")
سوال 18: حذف اعداد فرد از عدد
برنامهای بنویسید که عددی دریافت کند و با while فقط ارقام زوج آن را نگه دارد.
# نمونه ورودی: 123456
# خروجی: 246
# راه حل:
n = int(input("enter a number: "))
result = 0
multiplier = 1
while n > 0:
digit = n % 10
if digit % 2 == 0:
result = digit * multiplier + result
multiplier *= 10
n //= 10
print(result)
سوال 19: چاپ الگوی ستاره با while
برنامهای بنویسید که عددی دریافت کند و با while الگوی ستارهای بسازد (هر خط یک ستاره کمتر).
# نمونه ورودی: 5
# خروجی:
# *****
# ****
# ***
# **
# *
# راه حل:
n = int(input("enter a number: "))
while n > 0:
print("*" * n)
n -= 1
سوال 20: تبدیل دودویی به دهدهی
برنامهای بنویسید که یک عدد دودویی (binary) دریافت کند و آن را به دهدهی (decimal) تبدیل کند.
# نمونه ورودی: 1010
# خروجی: 10
# راه حل:
binary = int(input("enter binary number: "))
decimal = 0
power = 0
while binary > 0:
digit = binary % 10
decimal += digit * (2 ** power)
power += 1
binary //= 10
print(decimal)
دیدگاهتان را بنویسید