در بخش اول آموزش پایتون با مفاهیم پایه مانند ورودی گرفتن، متغیرها، شرطها و لیستها آشنا شدیم.
حالا وقت آن است که یک قدم جلوتر برویم و یاد بگیریم چگونه کارهای تکراری را سادهتر انجام دهیم و کدهای منظمتری بنویسیم. در این بخش با حلقهها، توابع و در نهایت ساخت یک پروژه واقعی در پایتون آشنا خواهیم شد
این آموزش با الهام از دوره Python Bootcamp از Angela Yu و با بازنویسی آموزشی، مثالهای تکمیلی و تمرینهای اختصاصی تهیه شده است.
- چرا به حلقهها نیاز داریم؟
- حلقه For در پایتون
- محاسبه مجموع مقادیر یک لیست با حلقه for
- محاسبه میانگین با حلقهها
- پیدا کردن بیشترین مقدار در لیست
- استفاده از Range در پایتون
- محاسبه مجموع اعداد با Range
- محاسبه مجموع اعداد زوج
- تمرین FizzBuzz
- آشنایی با Code Block و Indentation
- ساخت تابع در پایتون
- حلقه While
- تفاوت For و While
- پروژه Hangman
- تمرینهای برنامهنویسی این بخش همراه با پاسخ
1. چرا به حلقهها نیاز داریم؟
فرض کنید لیستی از چند محصول داریم:
products = ["Laptop", "Phone", "Tablet", "Camera"]اگر بخواهیم همه محصولات را نمایش دهیم، میتوانیم به صورت دستی بنویسیم:
print(products[0])
print(products[1])
print(products[2])
print(products[3])این روش برای چند مقدار کوچک قابل انجام است.
اما اگر لیست ما شامل هزار محصول باشد، نوشتن این تعداد دستور منطقی نیست. اینجاست که حلقهها به کمک ما میآیند.
حلقهها به ما اجازه میدهند یک بخش از کد را چندین بار اجرا کنیم، بدون اینکه مجبور باشیم کد تکراری بنویسیم
2. حلقه For در پایتون
حلقه for برای حرکت روی اعضای یک مجموعه استفاده میشود.
ساختار کلی:
for item in collection:
do somethingمثال:
books = ["Python", "Java", "C++"]
for book in books:
print(book)خروجی:
Python
Java
C++در هر بار اجرای حلقه، یک مقدار از لیست داخل متغیر book قرار میگیرد.
# مرحله اول
book = Python
# مرحله دوم
book = Java
# مرحله سوم
book = C++نکته مهم: فاصلهگذاری در حلقهها
در پایتون فاصله ابتدای خطوط اهمیت زیادی دارد. کدی که داخل حلقه قرار میگیرد باید با فاصله نوشته شود.
درست:
for book in books:
print(book)غلط:
for book in books:
print(book)پایتون از این فاصلهها برای تشخیص محدوده اجرای کد استفاده میکند.
3. محاسبه مجموع مقادیر یک لیست با For Loop
فرض کنید قیمت چند محصول را داریم:
prices = [120, 250, 80, 400, 150]میخواهیم مجموع قیمتها را محاسبه کنیم.
ابتدا یک متغیر برای نگهداری مجموع ایجاد میکنیم:
total_price = 0سپس با حلقه روی لیست حرکت میکنیم:
prices = [120, 250, 80, 400, 150]
total_price = 0
for price in prices:
total_price += price
print(total_price)خروجی:
1000در هر مرحله مقدار جدید به مقدار قبلی اضافه میشود.
مثلاً:
0 + 120 = 120
120 + 250 = 370
370 + 80 = 450
450 + 400 = 850
850 + 150 = 10004. محاسبه میانگین با استفاده از حلقه
حالا میخواهیم میانگین قیمتها را حساب کنیم.
برای این کار به دو مقدار نیاز داریم:
- مجموع قیمتها
- تعداد محصولات
prices = [120, 250, 80, 400, 150]
total_price = 0
number_of_products = 0
for price in prices:
total_price += price
number_of_products += 1
average_price = round(total_price / number_of_products)
print(average_price)خروجی:
200در این مثال، تعداد محصولات را هم با استفاده از حلقه محاسبه کردیم.
البته در پایتون تابع آماده len() وجود دارد:
len(prices)اما هدف این مثال، تمرین کار با حلقهها است.
5. پیدا کردن بزرگترین مقدار در یک لیست
یکی از کاربردهای مهم حلقهها، پیدا کردن بیشترین مقدار است.
فرض کنید نمرات یک کلاس را داریم:
scores = [75, 88, 92, 64, 95]پایتون تابع آماده max() دارد:
print(max(scores))اما برای یادگیری، خودمان این کار را انجام میدهیم.
ابتدا یک مقدار اولیه قرار میدهیم:
highest_score = 0سپس تمام مقادیر را بررسی میکنیم:
scores = [75, 88, 92, 64, 95]
highest_score = 0
for score in scores:
if score > highest_score:
highest_score = score
print(f"The highest score is {highest_score}")خروجی:
The highest score is 95منطق برنامه:
- ابتدا بالاترین مقدار را صفر در نظر میگیریم.
- هر مقدار جدید را بررسی میکنیم.
- اگر مقدار جدید بزرگتر باشد، جایگزین میشود.
6. استفاده از Range در حلقه For
تا اینجا حلقه for را برای حرکت روی اعضای یک لیست استفاده کردیم. اما گاهی اوقات میخواهیم یک دستور را تعداد مشخصی بار اجرا کنیم.
برای مثال، اگر بخواهیم اعداد ۱ تا ۱۰ را چاپ کنیم، لازم نیست یک لیست بسازیم.
برای این کار از تابع range() استفاده میکنیم.
ساختار کلی:
range(start, stop)مثال:
for number in range(1, 11):
print(number)خروجی:
1
2
3
4
5
6
7
8
9
10نکته مهم: عدد دوم در
rangeشامل بازه نمیشود. یعنی:
range(1, 11)اعداد ۱ تا ۱۰ را تولید میکند، نه ۱ تا ۱۱.
مشخص کردن فاصله بین اعداد در Range
تابع range یک مقدار سوم هم میتواند دریافت کند که مشخص میکند هر بار چند واحد جلو برویم.
ساختار کامل:
range(start, stop, step)مثال:
for number in range(0, 20, 2):
print(number)خروجی:
0
2
4
6
8
10
12
14
16
18در این مثال:
- شروع از صفر است.
- قبل از رسیدن به ۲۰ متوقف میشود.
- هر بار ۲ واحد اضافه میشود.
7. محاسبه مجموع اعداد با Range
یکی از تمرینهای رایج استفاده از حلقهها، انجام محاسبات روی یک بازه از اعداد است.
فرض کنید میخواهیم مجموع اعداد ۱ تا ۱۰۰ را محاسبه کنیم.
total = 0
for number in range(1, 101):
total += number
print(total)خروجی کد بالا: 5050
در این برنامه: ابتدا:
total = 0قرار دادهایم.
سپس در هر بار اجرای حلقه، مقدار جدید را به آن اضافه کردهایم.
مثلاً:
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
...
تا در نهایت مجموع تمام اعداد به دست بیاید.
8. محاسبه مجموع اعداد زوج
حالا میخواهیم مجموع اعداد زوج بین ۱ تا ۱۰۰ را پیدا کنیم.
روش اول: استفاده از شرط
در این روش تمام اعداد را بررسی میکنیم و فقط اعداد زوج را انتخاب میکنیم.
total = 0
for number in range(1, 101):
if number % 2 == 0:
total += number
print(total)در اینجا از عملگر % استفاده کردهایم. این عملگر باقیمانده تقسیم را برمیگرداند.
روش دوم: استفاده از Step در Range
چون فقط اعداد زوج را نیاز داریم، میتوانیم از ابتدا فقط اعداد زوج تولید کنیم.
total = 0
for number in range(2, 101, 2):
total += number
print(total)در این روش حلقه فقط این اعداد را بررسی میکند:
2, 4, 6, 8, 10, ...بنابراین دیگر نیازی به شرط if نداریم.
9. تمرین FizzBuzz
یکی از تمرینهای معروف برنامهنویسی برای یادگیری حلقهها و شرطها، FizzBuzz است.
قوانین برنامه:
- اعداد ۱ تا ۱۰۰ بررسی شوند.
- اگر عدد بر ۳ بخشپذیر بود، کلمه
Fizzنمایش داده شود. - اگر عدد بر ۵ بخشپذیر بود، کلمه
Buzzنمایش داده شود. - اگر همزمان بر ۳ و ۵ بخشپذیر بود،
FizzBuzzنمایش داده شود. - در غیر این صورت خود عدد چاپ شود.
for number in range(1, 101):
if number % 3 == 0 and number % 5 == 0:
print("FizzBuzz")
elif number % 3 == 0:
print("Fizz")
elif number % 5 == 0:
print("Buzz")
else:
print(number)نکته مهم در این تمرین، ترتیب شرطها است.
برای مثال عدد ۱۵ هم بر ۳ و هم بر ۵ بخشپذیر است.
اگر شرط ۳ را اول بررسی کنیم:
if number % 3 == 0:برنامه دیگر به شرطهای بعدی نمیرسد. پس همیشه باید حالتهای خاصتر را زودتر بررسی کنیم.
10. Code Block و مفهوم Indentation در پایتون
یکی از تفاوتهای مهم پایتون با بسیاری از زبانهای برنامهنویسی، استفاده از فاصلهگذاری برای مشخص کردن بلوکهای کد است.
در زبانهایی مثل JavaScript یا C معمولاً از {} استفاده میشود.
اما در پایتون فاصله ابتدای خط مشخص میکند که یک دستور متعلق به کدام بخش است.
مثال:
temperature = 35
if temperature > 30:
print("The weather is hot.")
print("Drink water.")
print("Program finished.")در این مثال دو دستور اول داخل شرط هستند:
print("The weather is hot.")
print("Drink water.")اما این دستور:
print("Program finished.")خارج از شرط قرار دارد. بنابراین همیشه اجرا میشود.
استفاده از Tab و Space
برای ایجاد فاصله میتوان از Tab یا Space استفاده کرد. اما نباید این دو را در یک پروژه با هم ترکیب کنیم.
روش استاندارد در پایتون:
چهار فاصله برای هر سطح:
if True:
print("Hello")11. Function در پایتون
تا اینجا از توابع آماده پایتون استفاده کردیم.
مثلاً:
print()
len()
range()
int()اینها توابعی هستند که قبلاً توسط برنامهنویسان پایتون ساخته شدهاند.
اما ما هم میتوانیم تابع خودمان را بسازیم.
برای ساخت تابع از کلمه def استفاده میکنیم.
ساختار کلی:
def function_name():
codeمثال:
def say_hello():
print("Hello Python")در این مرحله فقط تابع را تعریف کردهایم. برای اجرای آن باید تابع را صدا بزنیم:
say_hello()کد کامل:
def say_hello():
print("Hello Python")
say_hello()خروجی:
Hello Pythonچرا از Function استفاده میکنیم؟
فرض کنید یک بخش از کد را چند بار در برنامه نیاز داریم. بدون تابع مجبور هستیم کد را تکرار کنیم.
مثلاً:
print("Welcome user")
print("Have a nice day")اما با تابع:
def welcome_message():
print("Welcome user")
print("Have a nice day")هر زمان نیاز داشتیم:
welcome_message()را اجرا میکنیم.
مزیتهای تابع:
- جلوگیری از تکرار کد
- خواناتر شدن برنامه
- مدیریت سادهتر پروژه
12. حلقه While در پایتون
نوع دیگری از حلقهها در پایتون، حلقه while است.
ساختار:
while condition:
codeتا زمانی که شرط درست باشد، کد داخل حلقه اجرا میشود.
مثال:
count = 5
while count > 0:
print(count)
count -= 1خروجی:
5
4
3
2
1در هر بار اجرا مقدار count یک واحد کم میشود. وقتی مقدار آن به صفر برسد:
count > 0دیگر درست نیست و حلقه متوقف میشود.
مراقب حلقه بینهایت باشید
یکی از خطاهای رایج در حلقههای while ایجاد Infinite Loop است.
مثال اشتباه:
number = 10
while number > 0:
print(number)چون مقدار number هیچوقت تغییر نمیکند، شرط همیشه درست باقی میماند. در نتیجه برنامه بدون توقف اجرا میشود.
نسخه صحیح:
number = 10
while number > 0:
print(number)
number -= 113. تفاوت For و While
هر دو حلقه برای تکرار استفاده میشوند، اما کاربردشان متفاوت است.
حلقه For
وقتی تعداد تکرار مشخص است یا روی یک مجموعه حرکت میکنیم.
مثال:
names = ["Ali", "Sara", "Reza"]
for name in names:
print(name)یا:
for number in range(1, 10):
print(number)حلقه While
وقتی نمیدانیم چند بار باید تکرار شود و فقط یک شرط مشخص داریم.
مثال:
password = ""
while password != "1234":
password = input("Enter password: ")تا زمانی که رمز درست وارد نشود، برنامه ادامه پیدا میکند.
14. پروژه تمرینی بخش دوم: Hangman؛ ساخت بازی حدس کلمه
بازی Hangman یکی از پروژههای معروف برای تمرین برنامهنویسی است.
ایده بازی:
- برنامه یک کلمه انتخاب میکند.
- کاربر باید حروف آن را حدس بزند.
- اگر حرف درست باشد، جای آن نمایش داده میشود.
- اگر اشتباه باشد، از تعداد فرصتها کم میشود.
مثلاً کلمه:
pythonدر ابتدا:
_ _ _ _ _ _اگر کاربر حرف P را حدس بزند:
p _ _ _ _ _نمایش داده میشود.
انتخاب تصادفی کلمه
ابتدا از ماژول random استفاده میکنیم.
import random
words = ["python", "computer", "programming", "developer"]
chosen_word = random.choice(words)
print(chosen_word)تابع random.choice() یک مقدار تصادفی از لیست انتخاب میکند.
در نسخه اصلی بازی، نباید کلمه را چاپ کنیم؛ چون جواب را به بازیکن نشان میدهد.
ساخت جای خالی برای کلمه
ابتدا باید به تعداد حروف کلمه، جای خالی ایجاد کنیم.
chosen_word = "python"
display = []
for letter in chosen_word:
display.append("_")
print(display)خروجی:
['_', '_', '_', '_', '_', '_']بررسی حدس کاربر
حالا یک حرف از کاربر میگیریم:
guess = input("Guess a letter: ").lower()سپس حروف کلمه را بررسی میکنیم:
chosen_word = "python"
guess = input("Guess a letter: ").lower()
for letter in chosen_word:
if letter == guess:
print("Correct")
else:
print("Wrong")نمایش وضعیت واقعی بازی
به جای چاپ درست یا غلط، باید جای حرف درست را تغییر دهیم.
chosen_word = "python"
display = []
for letter in chosen_word:
display.append("_")
guess = input("Guess a letter: ").lower()
for position in range(len(chosen_word)):
if chosen_word[position] == guess:
display[position] = guess
print(display)اگر کاربر حرف P را وارد کند خروجی به صورت زیر میشود:
['p', '_', '_', '_', '_', '_']کامل کردن بازی با While
برای اینکه بازی ادامه پیدا کند، از حلقه while استفاده میکنیم.
import random
words = ["python", "computer", "programming"]
chosen_word = random.choice(words)
display = []
for letter in chosen_word:
display.append("_")
game_over = False
while not game_over:
guess = input("Guess a letter: ").lower()
for position in range(len(chosen_word)):
if chosen_word[position] == guess:
display[position] = guess
print(display)
if "_" not in display:
game_over = True
print("You win!")در اینجا:
while not game_over:یعنی تا زمانی که بازی تمام نشده است، ادامه بده.
اضافه کردن تعداد فرصتها
میتوانیم تعداد جانها را هم اضافه کنیم.
lives = 6اگر کاربر حرف اشتباه وارد کرد:
if guess not in chosen_word:
lives -= 1و اگر فرصتها تمام شد:
if lives == 0:
print("Game Over")جمعبندی بخش دوم
در این بخش وارد مرحله جدیدی از برنامهنویسی با پایتون شدیم. یاد گرفتیم چگونه با استفاده از حلقهها، عملیات تکراری را ساده کنیم. با for روی دادهها حرکت کردیم:
for item in list:با range بازههای عددی ساختیم:
range(1,10)با Function کدهای خود را مرتبتر کردیم:
def function_name():با while برنامههایی ساختیم که تا زمان برقرار بودن یک شرط ادامه پیدا میکنند.
در نهایت همه این مفاهیم را در پروژه Hangman کنار هم قرار دادیم و یک بازی واقعی ساختیم.
این مرحله یکی از مهمترین نقاط یادگیری پایتون است؛ زیرا از اینجا به بعد میتوانیم پروژههای بزرگتر و کاربردیتری ایجاد کنیم.
15. چند تمرین برای این بخش:
تمرین 1 : برنامهای بنویسید که تمام اعداد زوج بین ۱ تا ۵۰ را چاپ کند.
مشاهده پاسخ تمرین 1
for number in range(2, 51, 2):
print(number)تمرین 2: برنامهای بنویسید که مجموع اعداد بین ۱ تا ۲۰۰ را با استفاده از حلقه for محاسبه و چاپ کند.
مشاهده پاسخ تمرین 2
total = 0
for number in range(1, 201):
total += number
print(total)تمرین 3: با استفاده از حلقه while برنامهای بنویسید که از عدد ۱۰ تا ۱ شمارش معکوس کند و در پایان Go! را نمایش دهد.
مشاهده پاسخ تمرین 3:
number = 10
while number > 0:
print(number)
number -= 1
print("Go!")تمرین 4: برنامهای بنویسید که اعداد ۱ تا ۳۰ را بررسی کند و فقط اعدادی را نمایش دهد که بر ۳ بخشپذیر هستند.
مشاهده پاسخ تمرین 4:
# روش اول:
for number in range(1, 31):
if number % 3 == 0:
print(number)#روش دوم
for number in range(3, 31, 3):
print(number)تمرین 5: یک بازی حدس عدد بسازید که تا زمانی که کاربر عدد درست را وارد نکرده است ادامه پیدا کند.
مشاهده پاسخ تمرین 5:
secret_number = 7
guess = int(input("Guess the number: "))
while guess != secret_number:
print("Try again")
guess = int(input("Guess the number: "))
print("Correct!")
آی آر سورس کد |