دیتابیس Database و مدل Model در Django
دیتابیس Database و مدل Model در جنگو از درس قبل به خاطر دارید که آطلاعات دورهها به صورت ثابت داخل
فرض کنید معلم میخواهد نمرات ۳۰ دانشآموز را از کاربر دریافت کند. اگر حلقه نداشته باشیم، باید دستور input() را ۳۰ بار بنویسیم:
score1 = float(input("نمره دانشآموز ۱: "))
score2 = float(input("نمره دانشآموز ۲: "))
score3 = float(input("نمره دانشآموز ۳: "))
...
score30 = float(input("نمره دانشآموز ۳۰: "))واضح است که این روش هم زمانبر است و هم احتمال خطا را افزایش میدهد. با استفاده از حلقه میتوان تنها با چند خط کد، نمرات همه دانشآموزان را دریافت کرد. حلقهها برای انجام کارهای تکراری با تعداد دفعات مشخص یا نامشخص طراحی شدهاند.
در پایتون برای تکرار یک عملیات معمولاً از حلقه for استفاده میکنیم. ساختار کلی آن به شکل زیر است:
for variable in sequence:
دستورهاfor آغاز حلقه را مشخص میکند.variable در هر بار اجرای حلقه یک مقدار جدید دریافت میکند.sequence مجموعهای از مقادیر است که حلقه روی آن حرکت میکند.اولین مثال
for i in range(5):
print("Hello")خروجی
Hello
Hello
Hello
Hello
Helloدر این مثال، دستور print() پنج بار اجرا میشود.
مثال دوم
for i in range(5):
print(i)خروجی
0
1
2
3
4همانطور که میبینید، مقدار i در هر بار اجرای حلقه تغییر میکند. در اولین دور برابر ۰ است، سپس ۱، بعد ۲ و …
نام i فقط یک نام قراردادی است و میتوان هر نام دیگری انتخاب کرد. مثلاً:
for number in range(5):
print(number)یا
for x in range(5):
print(x)همه این کدها دقیقاً یک کار انجام میدهند.
تابع range() یکی از پرکاربردترین توابع در حلقههاست. این تابع مجموعهای از اعداد پشت سر هم تولید میکند. مثلاً:
range(5)اعداد زیر را تولید میکند:
0
1
2
3
4دقت کنید که عدد ۵ تولید نمیشود. یعنی همیشه از صفر شروع میشود و تا یک عدد قبل از مقدار نوشته شده ادامه پیدا میکند.
مثال
for i in range(8):
print(i)خروجی:
0
1
2
3
4
5
6
7مثال کاربردی
چاپ اعداد ۱ تا ۵:
for i in range(1, 6):
print(i)خروجی:
1
2
3
4
5در اینجا range(1, 6) یعنی: از عدد ۱ شروع کن و تا قبل از ۶ ادامه بده.
مثال دیگر
for i in range(3):
print("Python")خروجی:
Python
Python
Pythonهر بار که حلقه اجرا میشود، به آن یک دور (Iteration) گفته میشود. اگر range(5) را استفاده کنیم، حلقه ۵ دور اجرا خواهد شد.
تا اینجا از range() فقط با یک عدد استفاده کردیم:
range(5)اما تابع range() میتواند سه پارامتر نیز دریافت کند:
range(start, stop, step)که هر کدام معنی خاصی دارند:
پارامتر اول (Start)
اگر عدد شروع را مشخص کنیم، حلقه از همان عدد آغاز میشود.
for i in range(3, 8):
print(i)خروجی
3
4
5
6
7در این مثال: شروع از ۳ و پایان قبل از ۸
پارامتر سوم (Step)
پارامتر سوم مشخص میکند که هر بار چند واحد جلو برویم. مثلاً اگر بخواهیم فقط اعداد زوج را چاپ کنیم:
for i in range(2, 11, 2):
print(i)خروجی
2
4
6
8
10هر بار مقدار i دو واحد افزایش پیدا میکند.
مثال دیگر
for i in range(0, 21, 5):
print(i)خروجی
0
5
10
15
20در این مثال حلقه هر بار ۵ واحد جلو میرود.
شمارش معکوس
اگر مقدار step را منفی قرار دهیم، حلقه برعکس حرکت میکند.
for i in range(5, 0, -1):
print(i)خروجی
5
4
3
2
1در اینجا از ۵ شروع میکنیم و هر بار یک واحد کم میکنیم. قبل از رسیدن به صفر حلقه متوقف میشود.
شمارش معکوس از ۱۰ تا صفر
for i in range(10, -1, -1):
print(i)خروجی
10
9
8
7
6
5
4
3
2
1
0دقت کنید که چون عدد پایان -1 نوشته شده است، مقدار 0 نیز چاپ میشود.
چاپ مضربهای ۳
for i in range(3, 31, 3):
print(i)چاپ اعداد فرد
for i in range(1, 20, 2):
print(i)for i in range(2, 21, 2):
print(i)گاهی لازم است یک حلقه را داخل حلقهی دیگری قرار دهیم. به این نوع حلقهها حلقههای تو در تو (Nested Loops) گفته میشود. در این حالت، به ازای هر بار اجرای حلقهی بیرونی، حلقهی داخلی به طور کامل اجرا میشود. ساختار کلی آن به شکل زیر است:
for i in range(...):
for j in range(...):
دستورهاحلقهی بیرونی تعداد دفعات تکرار اصلی را مشخص میکند. و حلقهی داخلی در هر بار اجرای حلقهی بیرونی، از ابتدا اجرا میشود.
مثال اول
for i in range(3):
for j in range(2):
print(i, j)خروجی
0 0
0 1
1 0
1 1
2 0
2 1در این مثال: مقدار i ابتدا صفر است. حلقهی داخلی دو بار اجرا میشود و j به ترتیب ۰ و ۱ خواهد بود. سپس i برابر ۱ میشود و دوباره حلقهی داخلی از ابتدا اجرا میشود. این روند تا پایان ادامه پیدا میکند.
همانطور که مشاهده میکنید، هر بار که مقدار i تغییر میکند، مقدار j دوباره از ابتدا شروع میشود.
رسم مربع با ستاره
با حلقههای تو در تو میتوان شکلهای مختلف رسم کرد.
for i in range(5):
for j in range(5):
print("*", end="")
print()خروجی
*****
*****
*****
*****
*****حلقهی داخلی در هر سطر، پنج ستاره چاپ میکند.
print("*", end="")پارامتر end="" باعث میشود پس از چاپ هر ستاره، مکاننما به خط بعد نرود. بعد از پایان حلقهی داخلی، دستور زیر اجرا میشود:
print()که باعث میشود چاپ از سطر بعدی ادامه پیدا کند.
رسم مستطیل
for i in range(3):
for j in range(8):
print("*", end="")
print()خروجی
********
********
********
در حلقههای تو در تو، تعداد کل دفعات اجرای حلقهی داخلی برابر است با حاصلضرب تعداد تکرار دو حلقه. مثلاً در کد زیر:
for i in range(5):
for j in range(4):
print("*")
حلقهی بیرونی ۵ بار اجرا میشود. حلقهی داخلی در هر بار، ۴ مرتبه اجرا میشود. بنابراین دستور print("*") در مجموع ۲۰ بار اجرا خواهد شد.
تا اینجا با حلقهی for آشنا شدیم. حلقهی for زمانی مناسب است که از قبل بدانیم یک دستور چند بار باید تکرار شود. اما همیشه تعداد تکرارها مشخص نیست. گاهی لازم است یک عملیات تا زمانی که یک شرط برقرار است ادامه پیدا کند. در چنین شرایطی از حلقه while استفاده میکنیم.
ساختار کلی
while شرط:
دستورهاابتدا شرط بررسی میشود. اگر شرط True باشد، دستورات داخل حلقه اجرا میشوند. سپس دوباره شرط بررسی میشود. این روند تا زمانی ادامه پیدا میکند که شرط False شود.
اولین مثال
i = 1
while i <= 5:
print(i)
i += 1خروجی
1
2
3
4
5این برنامه چگونه اجرا میشود؟
ابتدا:
i = 1سپس شرط بررسی میشود:
i <= 5چون مقدار i برابر ۱ است، شرط برقرار است و حلقه اجرا میشود:
print(i)سپس این دستور اجرا میشود:
i += 1اکنون مقدار i برابر ۲ میشود. دوباره شرط بررسی میشود و این روند ادامه پیدا میکند تا زمانی که مقدار i به ۶ برسد. در این لحظه شرط دیگر برقرار نیست و حلقه متوقف میشود.
در حلقهی while باید حتماً مقدار متغیری که در شرط استفاده شده است تغییر کند. اگر این کار را انجام ندهیم، شرط همیشه برقرار خواهد ماند و برنامه هرگز متوقف نمیشود.
مثال نادرست
i = 1
while i <= 5:
print(i)در این برنامه مقدار i هیچوقت تغییر نمیکند. بنابراین شرط همیشه برقرار است و برنامه به صورت بینهایت اجرا میشود. به این حالت حلقهی بینهایت (Infinite Loop) گفته میشود.
چاپ اعداد زوج از ۲ تا ۱۰
i = 2
while i <= 10:
print(i)
i += 2خروجی
2
4
6
8
10شمارش معکوس
i = 5
while i > 0:
print(i)
i -= 1خروجی
5
4
3
2
1حلقه for | حلقه while |
|---|---|
| زمانی استفاده میشود که تعداد تکرار مشخص باشد. | زمانی استفاده میشود که تعداد تکرار از قبل مشخص نباشد. |
معمولاً همراه range() استفاده میشود. | بر اساس یک شرط اجرا میشود. |
| مدیریت شمارنده سادهتر است. | برنامهنویس باید خودش مقدار متغیر را تغییر دهد. |
| احتمال ایجاد حلقهی بینهایت بسیار کم است. | اگر شرط بهدرستی مدیریت نشود، ممکن است حلقهی بینهایت ایجاد شود. |
مثال کاربردی
فرض کنید میخواهیم اعداد را چاپ کنیم تا زمانی که به عدد ۱۰۰ برسیم.
number = 10
while number <= 100:
print(number)
number += 10خروجی
10
20
30
40
50
60
70
80
90
100
قبل از نوشتن حلقهی while همیشه این دو سؤال را از خود بپرسید:
شرط توقف حلقه چیست؟
کدام دستور باعث میشود شرط در نهایت نادرست (False) شود؟
اگر پاسخ سؤال دوم را ندانید، احتمال زیادی وجود دارد که برنامه وارد حلقهی بینهایت شود.
گاهی لازم است قبل از اینکه حلقه به پایان طبیعی خود برسد، اجرای آن را متوقف کنیم. در چنین شرایطی از دستور break استفاده میکنیم. به محض اجرای break، حلقه فوراً پایان مییابد و برنامه از اولین دستور بعد از حلقه ادامه پیدا میکند.
ساختار کلی
while شرط:
...
if شرط:
breakیا
for i in range(...):
...
if شرط:
breakمثال اول
for i in range(10):
if i == 5:
break
print(i)خروجی
0
1
2
3
4حلقه از عدد صفر شروع میشود. وقتی مقدار i به ۵ میرسد، شرط برقرار میشود و دستور break اجرا میشود. در نتیجه حلقه متوقف شده و عدد ۵ و اعداد بعد از آن چاپ نمیشوند.
مثال دوم
i = 1
while i <= 10:
if i == 6:
break
print(i)
i += 1خروجی
1
2
3
4
5در این مثال نیز حلقه به محض رسیدن به عدد ۶ متوقف میشود.
breakیکی از کاربردهای مهم break زمانی است که به نتیجهی موردنظر رسیدهایم و دیگر نیازی به ادامهی حلقه نیست. برای مثال:
دستور continue با break تفاوت دارد. continue حلقه را متوقف نمیکند، بلکه فقط از اجرای ادامهی دستورات همان دور از حلقه صرفنظر میکند و مستقیماً وارد دور بعدی میشود.
مثال اول
for i in range(6):
if i == 3:
continue
print(i)خروجی
0
1
2
4
5وقتی مقدار i برابر ۳ میشود، دستور continue اجرا میشود. بنابراین عدد ۳ چاپ نمیشود، اما حلقه همچنان ادامه پیدا میکند.
مثال دوم
چاپ فقط اعداد فرد
for i in range(1, 11):
if i % 2 == 0:
continue
print(i)خروجی
1
3
5
7
9در این برنامه هر بار که عدد زوج باشد، دستور continue اجرا میشود و آن عدد چاپ نمیشود.
break | continue |
|---|---|
| کل حلقه را متوقف میکند. | فقط همان دور از حلقه را رد میکند. |
| اجرای حلقه پایان مییابد. | حلقه از دور بعدی ادامه پیدا میکند. |
| دستورات بعد از حلقه اجرا میشوند. | حلقه همچنان به اجرای خود ادامه میدهد. |
break یعنی: «حلقه را تمام کن.»
continue یعنی: «این دور را رد کن و برو سراغ دور بعدی.»
در درسهای قبل یاد گرفتیم که یک رشته (String) از کنار هم قرار گرفتن چندین کاراکتر تشکیل میشود. هر حرف، عدد یا علامت داخل رشته یک کاراکتر محسوب میشود. از آنجا که رشته مجموعهای از کاراکترهاست، میتوان با استفاده از حلقه for روی تکتک کاراکترهای آن حرکت کرد.
مثال اول
text = "Python"
for ch in text:
print(ch)خروجی
P
y
t
h
o
nدر این مثال، حلقه در هر بار اجرا یکی از کاراکترهای رشته را داخل متغیر ch قرار میدهد و سپس آن را چاپ میکند.
متغیر ch چیست؟
در حلقه بالا از متغیری به نام ch استفاده شده است.
for ch in text:نام ch مخفف Character (کاراکتر) است. البته این فقط یک نام دلخواه است و میتوان هر نام دیگری انتخاب کرد. مثلاً:
for letter in text:
print(letter)یا
for x in text:
print(x)همه این برنامهها دقیقاً یک کار انجام میدهند.
مثال دوم
name = "Ali"
for letter in name:
print(letter)خروجی
A
l
iچاپ کاراکترها در یک خط
اگر بخواهیم کاراکترها در یک خط نمایش داده شوند، میتوانیم از پارامتر end استفاده کنیم.
text = "Python"
for ch in text:
print(ch, end=" ")خروجی
P y t h o nمثال دیگر
word = "Python"
for ch in word:
print(ch.upper())خروجی
P
Y
T
H
O
Nدر این مثال، هر کاراکتر به صورت جداگانه به حروف بزرگ تبدیل شده است.
رشتهای را در یک متغیر ذخیره کنید. برنامه باید اولین کاراکتری را پیدا کند که بیش از یک بار در رشته تکرار شده است. بعد از پیدا کردن آن، با استفاده از break جستجو را متوقف کند.
نمونه
Programming
خروجی
r
رمز صحیح را داخل یک متغیر ذخیره کنید. کاربر باید تا زمانی که رمز درست را وارد نکرده است، دوباره رمز را وارد کند. پس از ورود رمز صحیح، پیام موفقیت نمایش داده شود.
راهنمایی: از حلقه while استفاده کنید.
یک عدد مخفی (مثلاً 27) در برنامه قرار دهید. کاربر آنقدر عدد وارد کند تا عدد صحیح را حدس بزند. در پایان تعداد تلاشهای کاربر نیز نمایش داده شود.
راهنمایی: از while و یک متغیر برای شمارش دفعات تلاش استفاده کنید.
بررسی کنید که یک رمز عبور شرایط زیر را داشته باشد:
اگر همه شرایط برقرار بود، عبارت Strong Password و در غیر این صورت Weak Password چاپ شود.
یک رشته را از کاربر دریافت کنید و تعداد موارد زیر را جداگانه محاسبه کنید:
در پایان، هر سه مقدار را نمایش دهید.
با استفاده از حلقههای تو در تو، شکل زیر را چاپ کنید:
1 12 123 1234 12345
سعی کنید برنامه را طوری بنویسید که اگر عدد ۵ را به ۸ تغییر دادید، شکل به صورت خودکار تا ۸ ادامه پیدا کند.
یک عدد صحیح را از کاربر دریافت کنید و مشخص کنید آیا آن عدد اول (Prime) است یا خیر.
اگر عدد فقط بر ۱ و خودش بخشپذیر باشد، عبارت Prime و در غیر این صورت Not Prime چاپ شود.
راهنمایی: از یک حلقه و دستور break استفاده کنید.
در درس بعدی با ساختارهای داده در پایتون آشنا میشوید. با یادگیری لیستها، تاپلها، دیکشنریها و مجموعهها (Set)، میتوانید چندین داده را بهصورت منظم ذخیره و مدیریت کنید و برنامههای کاربردیتری بنویسید.
گام بعدی : ساختارهای داده در پایتوندیتابیس Database و مدل Model در جنگو از درس قبل به خاطر دارید که آطلاعات دورهها به صورت ثابت داخل
طراحی قالب سایت با HTML، CSS و Tailwind CSS تا اینجا با ساختار اصلی Django، URL، View و Template آشنا
Template و رابط کاربری در Django در سه درس قبلی، با ساخت پروژه، ساختار Django، URL و View آشنا شدیم.
URL و View در جنگو در درسهای قبل با Django آشنا شدیم، محیط مجازی را ساختیم، Django را نصب کردیم
ساختار Project و App در Django در درس قبل با Django آشنا شدیم، محیط مجازی ساختیم، Django را نصب کردیم
شروع کار با Django در دوره آموزش جامع پایتون با مفاهیمی مانند متغیرها، شرطها، حلقهها، توابع، کلاسها، فایلها و کار
عملیات CRUD درSQLite در بخش قبل با مفهوم پایگاه داده، SQLite و نحوه اتصال پایتون به پایگاه داده آشنا شدیم.
اتصال به پایگاه داده (Database) در پایتون وقتی یک برنامه اطلاعاتی را از کاربر دریافت میکند، معمولاً لازم است این
مدیریت خطا (Error Handling) در پایتون در هنگام اجرای برنامه، ممکن است کاربر ورودی نامناسبی وارد کند یا برنامه با
کار با فایل، ماژول، پکیج و محیط مجازی در پایتون در پروژههای واقعی، معمولاً همهی کدها را در یک فایل
کپسولهسازی (Encapsulation) در پایتون فرض کنید کلاسی برای حساب بانکی نوشتهاید. اگر هر کسی بتواند موجودی حساب را مستقیماً تغییر
وراثت و مفاهیم پیشرفته شی گرایی تا اینجا یاد گرفتهاید که چگونه با استفاده از کلاس (Class) و شی (Object)
کلاس و شیء در پایتون (Object-Oriented Programming) تا اینجا با متغیرها، شرطها، حلقهها، توابع و ساختارهای داده در پایتون آشنا
تابع لامبدا (Lambda Function) در پایتون گاهی اوقات فقط به یک تابع خیلی کوچک نیاز داریم؛ تابعی که قرار است
توابع در پایتون اگر هنگام برنامهنویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و
مجموعه (Set) در پایتون به زبان ساده، Set مجموعهای از عناصر منحصربهفرد (Unique) است که ترتیب مشخصی ندارد و اجازه
دیکشنری در پایتون تا اینجا با لیست (List) و تاپل (Tuple) آشنا شدیم که هر دو مجموعهای از دادهها را
تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی
لیست (List) در پایتون پرکاربردترین ساختار داده تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود
ساختارهای داده در پایتون در برنامههای واقعی معمولاً با یک داده سروکار نداریم، بلکه باید تعداد زیادی اطلاعات را ذخیره
حلقههای تکرار در پایتون (Python Loops) فرض کنید معلم میخواهد نمرات ۳۰ دانشآموز را از کاربر دریافت کند. اگر حلقه
عملگرهای مقایسهای (Comparison Operators) تا اینجا یاد گرفتیم که با عملگرهای محاسباتی میتوانیم اعداد را با هم جمع، تفریق و…
دریافت ورودی از کاربر در پایتون (Python Input) تا اینجا یاد گرفتیم که چگونه مقدار یک متغیر را خودمان داخل
عملگرهای محاسباتی در پایتون (Arithmetic Operators) تقریباً تمام برنامهها به انجام محاسبات نیاز دارند؛ از جمع و تفریق ساده گرفته
کار با رشتهها در پایتون (Python Strings) مدیریت و پردازش متنها در برنامهها در دنیای برنامهنویسی، اطلاعات همیشه عدد و
متغیرها در پایتون (Python Variables) اولین قدم برای ذخیره و پردازش اطلاعات تصور کنید یک برنامه مینویسید که قرار است
شروع برنامه نویسی با پایتون ساخت اولین پروژه (Hello World) فهرست مطالب بعد از نصب Python چه کاری انجام دهیم؟
آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفتهاید برنامهنویسی را یاد بگیرید، احتمالاً نام زبان
الگوهای کندل استیک پیشرفته: راهنمای جامع برای معاملهگران حرفهای الگو های کندل استیک پیشرفته (یا به بیان دیگر الگوهای شمعی
آیلتس جنرال یا آکادمیک؟ کدام را باید انتخاب کنیم؟ آیا میدانید که انتخاب اشتباه بین آیلتس آکادمیک و جنرال میتواند
دانلود رایگان نمونه سوالات آزمون PTE جنرال اگر تصمیم گرفتهاید با هدف مهاجرت به یک کشور انگلیسی زبان، در آزمون
معرفی آزمون های زبان انگلیسی معتبر در ایران| کدام یک بهتر است؟ اگه قصد ادامه تحصیل یا مهاجرت داشته باشید،
بهترین روشهای آمادگی برای آزمون تافل چگونه برای آزمون تافل آماده شویم؟ آیا شما هم قصد دارید برای کسب نمره
چگونه در خارج از کشور برای آزمون آیلتس ثبت نام کنیم؟ اگر قصد مهاجرت تحصیلی یا کاری دارید، احتمالاً نام
آزمون GRE مناسب چه رشتههایی است؟ اگر قصد ادامه تحصیل در مقاطع کارشناسی ارشد یا دکترا در دانشگاههای بینالمللی را
بهترین نمونه سوالات اسپیکینگ تافل هوم ادیشن آزمون تافل هوم ادیشن این روزها یکی از پرطرفدارترین گزینهها برای سنجش مهارت
نحوه ثبت نام در آزمون دولینگو در ایران به صورت کامل نحوه ثبت نام در آزمون دولینگو در ایران چگونه
هزینه آزمون GRE در ایران چقدر است؟ اگر قصد مهاجرت تحصیلی دارید، احتمالاً نام آزمون GRE به گوشتان خورده است.
راهنمای کامل ثبتنام و پرداخت هزینه آزمون PTE در ترکیه برای متقاضیان ایرانی آزمون PTE (Pearson Test of English) یکی از
ووچر آزمون چیست و چگونه میتوان آن را تهیه کرد؟ ثبتنام در آزمونهای بینالمللی مانند TOEFL، GRE، PTE، GMAT، IELTS
بهترین تکنیک های لیسنینگ آیلتس برای کسب نمره بالا آزمون آیلتس (IELTS) یکی از معتبرترین آزمونهای ارزیابی مهارت زبان انگلیسی
آزمون پلاس مرجع آموزش برنامهنویسی، هوش مصنوعی، شبکه، نمونه سؤالات کنکورهای کامپیوتر، آزمونهای زبان دکتری و مدارک بینالمللی فناوری اطلاعات است. با ارائه آموزشهای تخصصی، منابع آموزشی و راهنمای آزمونها، به دانشجویان و متخصصان کمک میکنیم تا مهارتهای خود را توسعه داده و در مسیر موفقیت تحصیلی و شغلی گام بردارند.