My folder vip
76 subscribers
202 photos
82 videos
622 files
499 links
آرشیو یادگیری هک/امنیت

اینجا فولدر شخصی من برای یادگیری و ثبت مطالب Linux، Networking و Cyber Security است.

🔐 LPIC | Network+ | CEH | SANS
🐧 Linux & System Administration
🌐 Networking & Troubleshooting
💻 Python & Security Tools
🧪 Labs | CTF | Prac
Download Telegram
🐍 فصل سوم — پایتون مقدماتی — عملگرها
—————————————-
Operator یا عملگر یعنی نمادی که به Python می‌گوید چه عملی روی داده‌ها انجام دهد.
مثلاً:
x + y

علامت + یک عملگر است.

———————
1. عملگرهای حسابی — Arithmetic Operators
فرض کنیم:
x = 10
y = 3

جمع +
print(x + y)

خروجی:
13


——————————-

تفریق -
print(x - y)

خروجی:
7


——————


ضرب *
print(x * y)

خروجی:
30


————————-

تقسیم /
print(x / y)

خروجی:
3.3333333333333335

⚠️ نکته مهم:
/ نتیجه را به صورت Float برمی‌گرداند.

—————————

تقسیم صحیح //
print(x // y)

خروجی:
3

یعنی قسمت اعشاری را کنار می‌گذارد.
10 ÷ 3 = 3.333...
10 // 3 = 3



——————————-

باقی‌مانده %
print(x % y)

خروجی:
1

چون:
10 ÷ 3

سه تا 3 می‌شود 9 و 1 باقی می‌ماند.
این عملگر خیلی کاربردی است؛ مثلاً برای تشخیص زوج و فرد:
number = 10

print(number % 2)

اگر نتیجه 0 باشد، عدد زوج است.

—————————-

2. عملگرهای مقایسه‌ای — Comparison Operators
اینجا نتیجه مقایسه همیشه یکی از این دو است:
True
False

مثلاً:
a = 8
b = 8

print(a == b)

خروجی:
True

——————

== برابر بودن
a = 8
b = 8

print(a == b)

یعنی:
آیا a و b برابر هستند؟

⚠️ خیلی مهم:
=

با:
==

فرق دارد.
= برای Assignment است.
== برای مقایسه است.
——————————-

> بزرگ‌تر
print(a > b)

یعنی:
آیا a از b بزرگ‌تر است؟




<
کوچک‌تر
print(a < b)

یعنی:
آیا a از b کوچک‌تر است؟



!=
نابرابر
a != b

مثلاً:
print(a != b)

یعنی:
آیا a و b با هم برابر نیستند؟





<= کوچک‌تر یا مساوی
print(a <= b)

یعنی:
آیا a کوچک‌تر یا مساوی b است؟




>=
بزرگ‌تر یا مساوی
در جزوه نوشته بود:
a => b

❌ اشتباه است.
درست:
a >= b

مثلاً:
print(a >= b)


—————————

3. نتیجه Comparison چه Data Typeای دارد؟
مثلاً:
a = 8
b = 8

c = a < b

print(c)
print(type(c))

خروجی:
False
<class 'bool'>

نوع داده:
Boolean (bool)
است.
Boolean فقط دو مقدار دارد:
True
False



———————-

4. Assignment Operators
Assignment یعنی مقداردهی یا تغییر مقدار متغیر.
مثلاً:
x = 10

حالا:
x = x + 5

یعنی:
10 + 5 = 15

پس:
print(x)

خروجی:
15



———————

روش کوتاه‌تر
به جای:
x = x + 5

می‌توانیم بنویسیم:
x += 5

یا
تفریق:
x -= 5

یا
ضرب:
x *= 5

یا
تقسیم:
x /= 5

یا
تقسیم صحیح:
x //= 5

یا
باقی‌مانده:
x %= 5

نتیجه یکی است.

———————————-


5. Logical Operators 🧠
این قسمت همان:
AND / OR / NOT
است.
این عملگرها معمولاً برای ترکیب چند شرط استفاده می‌شوند.

—————————

AND
and یعنی:
هر دو شرط باید True باشند.

مثلاً:
x = 5

print(x > 3 and x < 10)

شرط اول:
5 > 3 → True

شرط دوم:
5 < 10 → True

پس:
True AND True → True

خروجی:
True

مثال دیگر:
x = 5

print(x > 6 and x < 10)

اینجا:
5 > 6 → False
5 < 10 → True

پس:
False AND True → False


———————-
OR
or یعنی:
حداقل یکی از شرط‌ها True باشد.

مثلاً:
x = 5

print(x > 6 or x < 10)

داریم:
5 > 6 → False
5 < 10 → True

چون یکی True است:
False OR True → True


————————————

NOT
not نتیجه را برعکس می‌کند.
مثلاً:
x = 5

print(not(x > 3 and x < 10))

اول:
x > 3 → True
x < 10 → True

پس:
True AND True → True

بعد not آن را برعکس می‌کند:
not True → False
پس خروجی:
False
🐍 فصل چهارم — پایتون مقدماتی — ورودی و خروجی ها
—————————————-
1. Output چیست؟
Output یعنی خروجی برنامه؛ یعنی برنامه اطلاعاتی را به کاربر نمایش دهد.
مهم‌ترین دستور برای خروجی گرفتن:
print()

مثلاً:
print("Hello Ali")

خروجی:
Hello Ali


———————
2. Escape Character چیست؟ 🔤
گاهی می‌خواهیم داخل یک String کار خاصی انجام دهیم؛ مثلاً:
رفتن به خط بعد
ایجاد فاصله Tab
نمایش کوتیشن
نمایش \
برای این کار از Escape Character استفاده می‌کنیم.
علامت اصلی آن:
\

است.

—————

\" نمایش Double Quote
مثلاً:
print('ali reza "python" nima')

چون بیرون String از ' استفاده کرده‌ایم، مشکلی نداریم.
اما اگر بخواهیم خود String با " باشد:
print("ali reza \"python\" nima")

خروجی:
ali reza "python" nima

\" یعنی:
این

"
را به عنوان بخشی از متن در نظر بگیر.

———————
3. \n رفتن به خط بعد
print('ali reza "python" \nnima')

خروجی:
ali reza "python"
nima

یعنی:
\n = New Line


——————-

4. \t ایجاد Tab
print('ali reza "python" \tnima')

خروجی تقریباً:
ali reza "python"     nima

یعنی:
\t = Tab



———————

5. end در print
به صورت پیش‌فرض print() بعد از نمایش متن به خط بعد می‌رود.
مثلاً:
print("Ali")
print("Reza")

خروجی:
Ali
Reza

اما می‌توانیم رفتار پایان print را با end تغییر دهیم:
print("Ali", end=" . ")
print("Reza")

خروجی:
Ali . Reza

چون به جای رفتن به خط بعد، end مشخص کرده‌ایم:
end=" . "


————————
6. Input چیست؟ ⌨️
Input یعنی گرفتن اطلاعات از کاربر.
برای این کار از:
input()

استفاده می‌کنیم.
مثلاً:
input("Enter your name: ")

برنامه منتظر می‌ماند تا کاربر چیزی وارد کند.


—————————-
7. ذخیره کردن Input در Variable
اگر بخواهیم ورودی کاربر را نگه داریم:
first_name = input("Enter your name: ")
last_name = input("Enter your lastname: ")
age = input("Enter age: ")

حالا اطلاعات داخل متغیرها ذخیره شده‌اند.
می‌توانیم نمایششان بدهیم:
print("Your name:", first_name)
print("Lastname:", last_name)
print("Your age:", age)


——————

⚠️ نکته خیلی مهم درباره input
هر چیزی که با input() دریافت می‌کنیم، به صورت String (str) وارد برنامه می‌شود.
مثلاً:
age = input("Enter age: ")

اگر کاربر وارد کند:
25

مقدار age در واقع:
"25"

است.
نه:
25

پس اگر بخواهیم با آن محاسبات ریاضی انجام دهیم، باید تبدیلش کنیم.



_———————-

8. ساخت ماشین‌حساب ساده 🧮
در جزوه‌ات نوشتی:
x = input("num1")
y = input("num2")

print("my answer:", x + y)

اما اینجا یک نکته مهم وجود دارد.
فرض کنیم کاربر وارد کند:
10

و:
20

چون هر دو String هستند:
x + y

می‌شود:
"10" + "20"

و نتیجه:
1020

❌ نه 30!

————————

راه درست
باید ورودی را تبدیل کنیم:
x = int(input("num1: "))
y = int(input("num2: "))

print("My answer:", x + y)

اگر کاربر وارد کند:
10
20

خروجی:
My answer: 30

اینجا:
int(input())

یعنی:
ورودی را بگیر و آن را به Integer تبدیل کن.


_—————————-

9. f-string چیست؟ 🔥
یکی از بهترین روش‌های نمایش متغیرها داخل متن، f-string است.
مثلاً:
name = "Ali"
age = 25
score = 19.7

print(f"name: {name} and age: {age} and score: {score}")

خروجی:
name: Ali and age: 25 and score: 19.7

قسمت مهم:
f"... {name} ..."

حرف f به Python می‌گوید:
داخل این String ممکن است Expression یا Variable داشته باشیم.

و متغیر را داخل:
{ }

قرار می‌دهیم.

_————————

10. روش قدیمی‌تر %
در جزوه‌ات این را هم داشتی:
print("name: %s, age: %d" % (name, age))

اینجا:
%s → String
%d → Integer

این روش قدیمی‌تر است.
امروزه معمولاً f-string خواناتر و راحت‌تر است:
print(f"name: {name}, age: {age}")

پس برای Python جدید، f-string را خوب یاد بگیر.

————————

11. ترکیب Input + تبدیل نوع داده
مثال کامل:
name = input("Enter your name: ")
age = int(input("Enter your age: "))
score = float(input("Enter your score: "))

print(f"name: {name}")
print(f"age: {age}")
print(f"score: {score}")

فرض کن کاربر وارد کند:
Ali
25
19.7

خروجی:
name: Ali
age: 25
score: 19.7

اینجا:
age = int(input(...))

یعنی سن را به Integer تبدیل کردیم.
و:
score = float(input(...))

یعنی نمره را به Float تبدیل کردیم.
🧠 یک مثال واقعی برای مسیر امنیت
فرض کن بعداً می‌خواهیم ابزار امنیتی بنویسیم که IP از کاربر بگیرد:
ip = input("Enter target IP: ")

print(f"Target IP is: {ip}")

کاربر:
192.168.1.10

برنامه:
Target IP is: 192.168.1.10

بعداً همین Input را می‌توانیم وارد بخش‌های شبکه، Socket و ابزارهای امنیتی کنیم. 🔥
🔥1
🐍 فصل پنجم — پایتون مقدماتی — ساختار داده
—————————————-

1️⃣ لیست — list
لیست را زمانی استفاده می‌کنیم که بخواهیم چند مقدار را کنار هم نگه داریم و امکان تغییر آنها را داشته باشیم.
مثلاً سن چند نفر:
ages = [20, 10, 1, 15, 16]

هر عضو یک Index دارد.
⚠️ نکته مهم: شماره‌گذاری از 0 شروع می‌شود.
Index:    0   1   2   3   4
Value: 20 10 1 15 16

پس:
print(ages[0])

خروجی:
20

و:
print(ages[1])

خروجی:
10

🔹 داخل List چه چیزی می‌توانیم قرار دهیم؟
تقریباً هر نوع داده‌ای:
data = [10, "Ali", 19.5, True]

حتی می‌توانیم لیست داخل لیست داشته باشیم.

2️⃣ اضافه کردن به List
append()
اگر بخواهیم چیزی را به انتهای لیست اضافه کنیم:
ages.append("Reza")


2️⃣insert()
اگر بخواهیم در یک Index مشخص چیزی اضافه کنیم:
ages.insert(0, "Zahra")

یعنی "Zahra" را در Index شماره 0 قرار بده.

3️⃣ حذف از List
pop()
اگر Index را بدانیم:
ages.pop(2)

عضو Index شماره 2 را حذف می‌کند.


remove()
اگر Index را ندانیم ولی خود مقدار را بدانیم:
ages.remove(10)

اولین مقدار 10 را پیدا می‌کند و حذف می‌کند.



پس تفاوت:
ages.pop(2)

یعنی:
عضو شماره 2 را حذف کن.

ولی:
ages.remove(10)

یعنی:
مقدار 10 را پیدا کن و حذف کن.





—————————————

مثال کاربردی — محاسبه نمرات
فرض کنیم می‌خواهیم نمرات 4 درس را از کاربر بگیریم.
scores = []

score_1 = int(input("1 score: "))
score_2 = int(input("2 score: "))
score_3 = int(input("3 score: "))
score_4 = int(input("4 score: "))

scores.append(score_1)
scores.append(score_2)
scores.append(score_3)
scores.append(score_4)

result = score_1 + score_2 + score_3 + score_4

print(result / 4)

ولی یک نکته مهم وجود دارد.
ما اصلاً لازم نیست برای تعداد درس‌ها عدد 4 را دستی بنویسیم.
از len() استفاده می‌کنیم.

———————————————

5️⃣ تابع len()
len() تعداد اعضای یک ساختار داده را به ما می‌دهد.
مثلاً:
scores = [18, 19, 20, 17]

print(len(scores))

خروجی:
4

بنابراین:
print(result / len(scores))

یعنی:
مجموع نمرات را بر تعداد نمرات تقسیم کن.

این روش بهتر است چون اگر بعداً 5 نمره داشتیم، لازم نیست 4 را دستی تغییر دهیم.

—————————

6️⃣ Tuple — تاپل
Tuple شبیه List است، اما یک تفاوت بسیار مهم دارد:
Tuple بعد از ساخته شدن قابل تغییر نیست.

مثلاً:
colors = ("red", "blue", "white", "black")

می‌توانیم:
print(colors[0])

اما نمی‌توانیم بگوییم:
colors[0] = "green"

و Python خطا می‌دهد.
چرا Tuple؟
وقتی اطلاعاتی داریم که نباید تغییر کنند.
مثلاً:
server_info = ("192.168.1.10", 22, "SSH")

اگر این اطلاعات قرار است ثابت باشند، Tuple انتخاب مناسبی است.

———————————-

7️⃣ Tuple Unpacking
یکی از قابلیت‌های جالب Tuple، Unpacking است.
مثلاً:
student = ("Ali", 25, 19.5)

می‌توانیم مقدارها را جداگانه داخل متغیرها بریزیم:
name, age, score = student

حالا:
print(name)
print(age)
print(score)

خروجی:
Ali
25
19.5

یعنی:
student
↓
("Ali", 25, 19.5)

↓ Unpacking

name = "Ali"
age = 25
score = 19.5

⚠️ تعداد متغیرها باید با تعداد مقادیر هماهنگ باشد.
مثلاً این اشتباه است:
name, age = ("Ali", 25, 19.5)

چون 3 مقدار داریم ولی فقط 2 متغیر.

————————-

8️⃣ Packing
برعکس Unpacking را می‌توانیم به شکل ساده Packing در نظر بگیریم.
یعنی چند مقدار را در یک Tuple قرار دهیم:
student = "Ali", 25, 19.5

Python آن را به شکل Tuple در نظر می‌گیرد:
("Ali", 25, 19.5)

البته بهتر است برای خوانایی بنویسیم:
student = ("Ali", 25, 19.5)


—————————

9️⃣ Set — مجموعه
Set برای نگهداری مجموعه‌ای از داده‌ها استفاده می‌شود که:
ترتیب مشخصی ندارند
عضو تکراری نگه نمی‌دارند
قابل تغییر هستند
مثلاً:
numbers = {1, 2, 3, 4, 4, 5}

نتیجه:
{1, 2, 3, 4, 5}

عدد 4 فقط یک بار باقی می‌ماند.
کاربرد واقعی
مثلاً از یک سیستم لاگ گرفته‌ایم و IPهای مختلف داریم:
ips = {
"192.168.1.10",
"192.168.1.20",
"192.168.1.10",
"192.168.1.30"
}

اگر بخواهیم فقط IPهای منحصربه‌فرد را داشته باشیم، Set خیلی مناسب است.

—————————————-

🔟 اضافه کردن به Set
با add():
numbers.add(6)

نتیجه:
{1, 2, 3, 4, 5, 6}



1️⃣1️⃣ حذف از Set
remove()
numbers.remove(2)

عدد 2 حذف می‌شود.
اما اگر 2 در Set وجود نداشته باشد، خطا می‌دهد.

discard()
numbers.discard(7)

اگر 7 وجود داشته باشد، حذف می‌شود.
اگر وجود نداشته باشد:
هیچ خطایی نمی‌دهد.

⚠️ در جزوه‌ات dicard نوشته شده؛ دستور صحیح:
discard()

است.



1️⃣2️⃣ اجتماع Setها — Union
فرض کنیم:
a = {1, 2, 3, 4, 5}
b = {1, 3, 4, 5, 6, 9}

با:
print(a | b)

اجتماع دو مجموعه را می‌گیریم:
{1, 2, 3, 4, 5, 6, 9}

یعنی:
همه اعضای A و B، بدون تکرار.




1️⃣3️⃣ اشتراک — Intersection
با:
print(a & b)

اعضای مشترک را پیدا می‌کنیم.
نتیجه:
{1, 3, 4, 5}

یعنی فقط چیزهایی که هم در A هستند و هم در B.




1️⃣4️⃣ تفاضل — Difference
print(a - b)

یعنی:
چیزهایی که در A هستند ولی در B نیستند.

نتیجه:
{2}

اما اگر بنویسیم:
print(b - a)

نتیجه:
{6, 9}

پس ترتیب مهم است.







1️⃣5️⃣ Dictionary — دیکشنری
دیکشنری یکی از مهم‌ترین ساختارهای Python است.
در Dictionary اطلاعات به صورت:
key : value

ذخیره می‌شوند.
مثلاً:
student = {
"name": "Alireza",
"age": 20,
"score": 19.5
}

اینجا:
key       value
----------------
name Alireza
age 20
score 19.5





1️⃣6️⃣ دسترسی به Dictionary
مثلاً:
print(student["name"])

خروجی:
Alireza

یا:
print(student["age"])

خروجی:
20


————————————————
My folder vip
🐍 فصل پنجم — پایتون مقدماتی — ساختار داده —————————————- 1️⃣ لیست — list لیست را زمانی استفاده می‌کنیم که بخواهیم چند مقدار را کنار هم نگه داریم و امکان تغییر آنها را داشته باشیم. مثلاً سن چند نفر: ages = [20, 10, 1, 15, 16] هر عضو یک Index دارد. ⚠️ نکته…
1️⃣7️⃣ get()
روش دیگر برای گرفتن مقدار:
print(student.get("age"))

خروجی:
20

تفاوت مهم این دو:
student["phone"]

اگر phone وجود نداشته باشد، KeyError می‌گیریم.
اما:
student.get("phone")

اگر وجود نداشته باشد، به‌صورت پیش‌فرض:
None

برمی‌گرداند.
حتی می‌توانیم مقدار جایگزین تعیین کنیم:
print(student.get("phone", "Not Found"))

اگر phone وجود نداشته باشد:
Not Found


————————————

1️⃣8️⃣ تغییر مقدار Dictionary
مثلاً:
student["name"] = "Reza"

حالا:
print(student["name"])

می‌شود:
Reza



—————————-

1️⃣9️⃣ اضافه کردن Key جدید
مثلاً:
student["phone"] = "09132565464"

حالا Dictionary شامل phone هم می‌شود.
نکته جالب:
اگر Key از قبل وجود داشته باشد:
student["age"] = 25

مقدار قبلی تغییر می‌کند.
اگر Key وجود نداشته باشد:
student["phone"] = "..."

یک مورد جدید اضافه می‌شود.

——————————-

2️⃣0️⃣ حذف از Dictionary
با del:
del student["age"]

Key و مقدار مربوط به آن حذف می‌شوند.


pop()
می‌توانیم مقدار حذف‌شده را هم دریافت کنیم:
a = student.pop("phone")

print("a is", a)

یعنی:
phone
را حذف کن و مقدارش را داخل

a
قرار بده.


————————————

🔥 حالا مهم‌ترین سؤال: کِی از کدام استفاده کنیم؟
این قسمت را خیلی خوب یاد بگیر:
🟢 List
وقتی:
چند داده داریم، ترتیب برایمان مهم است و می‌خواهیم بتوانیم آنها را تغییر دهیم.

مثلاً:
servers = ["server1", "server2", "server3"]

—————————

🔵 Tuple
وقتی:
چند داده داریم، ترتیب مهم است ولی نمی‌خواهیم داده‌ها تغییر کنند.

مثلاً:
server = ("192.168.1.10", 22, "SSH")

———————-

🟡 Set
وقتی:
فقط اعضای منحصربه‌فرد برایمان مهم هستند و تکراری نمی‌خواهیم.

مثلاً:
blocked_ips = {
"1.1.1.1",
"2.2.2.2",
"1.1.1.1"
}

IP تکراری حذف می‌شود.


—————————————-


🔴 Dictionary
وقتی:
می‌خواهیم هر داده یک اسم/کلید داشته باشد.

مثلاً:
server = {
"ip": "192.168.1.10",
"port": 22,
"service": "SSH"
}

خیلی راحت می‌توانیم بگوییم:
server["ip"]



——————————-

🧠 یک مثال امنیتی که هر 4 تا را با هم ببینیم
فرض کن اطلاعات یک سرور را داریم:
server = {
"name": "WebServer",
"ip": "192.168.1.10",
"ports": [22, 80, 443],
"protocols": ("SSH", "HTTP", "HTTPS"),
"users": {"ali", "reza", "ali"}
}

اینجا:
dict → اطلاعات کلی سرور
list → پورت‌ها چون ترتیب/لیست‌بودن و تغییرپذیری می‌تواند مهم باشد
tuple → پروتکل‌های ثابت
set → کاربران بدون تکرار
این دقیقاً جایی است که Data Structures در پروژه‌های واقعی شبکه و امنیت کاربرد پیدا می‌کند. 🔥
🐍 فصل ششم — پایتون مقدماتی — control flow
—————————————-
Control Flow یعنی کنترل جریان اجرای برنامه.
تا قبل از این، برنامه معمولاً خط‌به‌خط اجرا می‌شد:
print("A")
print("B")
print("C")

اما با شرط‌ها می‌توانیم بگوییم:
اگر این اتفاق افتاد، این کار را انجام بده؛ وگرنه کار دیگری انجام بده.


=================

1️⃣ if — شرط
مثلاً می‌خواهیم نمره را بررسی کنیم:
score = int(input("Enter your score: "))

if score > 50:
print("Afarin")

یعنی:
اگر

score
بزرگ‌تر از 50 بود،

Afarin
را چاپ کن.

⚠️ دو نکته مهم
در جزوه نوشته بودی:
if score > 50;

❌ اشتباه است.
باید : باشد:
if score > 50:

و دستور داخل if باید Indentation داشته باشد:
if score > 50:
print("Afarin")

===============

2️⃣ if / else
اگر بخواهیم برای حالت غلط هم کاری انجام دهیم:
score = int(input("Enter your score: "))

if score > 50:
print("Afarin")
else:
print("Niyaz be talash")

یعنی:
اگر score > 50
↓
آفرین

در غیر این صورت
↓
نیاز به تلاش



>=
اگر بنویسیم:
if score >= 50:

یعنی:
بزرگ‌تر از 50 یا مساوی 50

پس خود 50 هم قبول می‌شود.
تفاوت:
> 50   → خود 50 قبول نیست
>= 50 → خود 50 هم قبول است

====================

3️⃣ Nested If — شرط تو در تو
مثالی که نوشتی مربوط به Login بود:
user = input("Enter user: ")
password = input("Enter pass: ")

if user == "admin":
if password == "1234":
print(f"Welcome {user}")
else:
print("Password eshtebah")
else:
print("User eshtebah")

اینجا دو شرط داریم.
اول:
if user == "admin":

اگر Username درست بود، می‌رود سراغ Password:
if password == "1234":

اگر هر دو درست باشند:
Welcome admin

اگر Username درست باشد ولی Password اشتباه باشد:
Password eshtebah

و اگر Username اشتباه باشد:
User eshtebah



==================

4️⃣ elif
گاهی بیشتر از دو حالت داریم.
مثلاً می‌خواهیم بر اساس نمره Grade تعیین کنیم:
score = int(input("Enter your score: "))

grade = ""

if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"

print(grade)

⚠️ یک اشتباه در جزوه:
نوشته بودی:
elif score => 80:

❌ اشتباه
درست:
elif score >= 80:




🧠 elif چطور کار می‌کند؟
Python شرط‌ها را از بالا به پایین بررسی می‌کند.
مثلاً:
score = 95

اول بررسی:
score >= 90

درست است → A
دیگر سراغ:
elif score >= 80
elif score >= 70

نمی‌رود.
یعنی وقتی یک شرط درست شد، آن شاخه اجرا می‌شود و زنجیره شرط تمام می‌شود.




🔥 چرا ترتیب elif مهم است؟
مثلاً این کد را ببین:
score = 95

if score >= 70:
grade = "C"
elif score >= 80:
grade = "B"
elif score >= 90:
grade = "A"

اینجا 95 >= 70 درست است.
پس همان اول C می‌شود! 😄
بنابراین باید از بزرگ‌ترین شرط به کوچک‌ترین شرط برویم:
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"



=================

5️⃣ Short-Hand If — شرط یک‌خطی
برای شرط‌های ساده می‌توانیم از حالت کوتاه استفاده کنیم.
مثلاً:
age = 20

status = "old" if age >= 50 else "young"

print(status)

چون:
20 >= 50

غلط است، نتیجه:
young

ساختار کلی:
value_if_true if condition else value_if_false

مثلاً:
result = "Pass" if score >= 50 else "Fail"

یعنی:
اگر نمره حداقل 50 بود

Pass
، وگرنه

Fail
.





===================
My folder vip
🐍 فصل ششم — پایتون مقدماتی — control flow —————————————- Control Flow یعنی کنترل جریان اجرای برنامه. تا قبل از این، برنامه معمولاً خط‌به‌خط اجرا می‌شد: print("A") print("B") print("C") اما با شرط‌ها می‌توانیم بگوییم: اگر این اتفاق افتاد، این کار را انجام بده؛…
🔐 مثال کاربردی برای مسیر امنیت
فرض کن می‌خواهیم بررسی کنیم یک IP در لیست IPهای مجاز هست یا نه:
allowed_ips = {
"192.168.1.10",
"192.168.1.20",
"192.168.1.30"
}

ip = input("Enter IP: ")

if ip in allowed_ips:
print("Access Granted")
else:
print("Access Denied")

اینجا شرط داریم:
ip in allowed_ips

که نتیجه‌اش True یا False می‌شود.
این نوع منطق را بعداً در اسکریپت‌های شبکه و امنیت خیلی زیاد می‌بینی.
🐍 فصل هفتم — پایتون مقدماتی — Control Flow Loops
—————————————-
Loop یعنی حلقه؛ یعنی یک قسمت از برنامه را چندین بار اجرا کنیم.
مثلاً به جای اینکه 5 بار بنویسیم:
print("Hello")
print("Hello")
print("Hello")
print("Hello")
print("Hello")

می‌توانیم از حلقه استفاده کنیم.

==========================

1️⃣ حلقه for
for زمانی خیلی کاربردی است که بخواهیم روی اعضای یک مجموعه یکی‌یکی حرکت کنیم.
مثلاً:
miveha = ("apple", "banana", "cherry")

for mive in miveha:
print(mive)

خروجی:
apple
banana
cherry

نحوه کار
Python می‌گوید:
miveha
↓
apple → print
banana → print
cherry → print

ساختار کلی:
for variable in collection:
code

یعنی:
برای هر عضو داخل collection، این کد را اجرا کن.


===================

2️⃣ for روی Dictionary
مثلاً:
person = {
"name": "Ali",
"age": 25
}

اگر بخواهیم هم Key و هم Value را بگیریم:
for key, value in person.items():
print(f"{key} = {value}")

خروجی:
name = Ali
age = 25

.items() چیست؟
person.items()

باعث می‌شود Key و Value را با هم دریافت کنیم.
یعنی تقریباً:
name → Ali
age → 25

==============

3️⃣ range()
یکی از مهم‌ترین چیزهایی که در for استفاده می‌شود:
range()

مثلاً:
for i in range(5):
print(i)

خروجی:
0
1
2
3
4

⚠️ نکته مهم:
range(5) از 0 تا قبل از 5 است.
یعنی:
0, 1, 2, 3, 4

پس 5 خودش چاپ نمی‌شود.

======================

4️⃣ حلقه while
while یعنی:
تا زمانی که شرط درست است، حلقه را ادامه بده.

مثلاً:
counter = 0

while counter < 10:
print("Hello bro")
counter += 1

اینجا:
counter = 0

شروع می‌شود.
هر بار:
counter += 1

یک واحد به آن اضافه می‌شود.
پس:
0
1
2
3
...
9

وقتی به 10 برسد:
counter < 10

دیگر False می‌شود و حلقه تمام می‌شود.
====================

⚠️ چرا counter += 1 مهم است؟
اگر این را ننویسیم:
counter = 0

while counter < 10:
print("Hello")

حلقه هیچ‌وقت به 10 نمی‌رسد!
چون counter همیشه 0 باقی می‌ماند.
پس یک Infinite Loop یا حلقه بی‌نهایت خواهیم داشت.

==================

5️⃣ while True
مثلاً:
while True:
print("Hello bro")

اینجا شرط همیشه:
True

است.
بنابراین حلقه خودش هیچ‌وقت تمام نمی‌شود.
برای متوقف کردن چنین حلقه‌ای معمولاً از break استفاده می‌کنیم.


===================

6️⃣ مثال گرفتن نام 10 دانش‌آموز

students = []
counter = 0

while counter < 10:
student = input("Enter name: ")
students.append(student)
counter += 1

print(students)

for name in students:
print(name)

اینجا:
students = []

لیست خالی است.
بعد:
student = input(...)

نام را داخل یک متغیر موقت می‌گیریم.
و:
students.append(student)

نام را به لیست اضافه می‌کنیم.
در نهایت 10 نفر داریم.


===================

🛑 7️⃣ break
break یعنی:
کلاً از حلقه خارج شو.

مثلاً همان برنامه دانش‌آموزها را در نظر بگیر.
فرض کن می‌گوییم اگر کاربر 0 وارد کرد، دیگر اسم بیشتری نگیریم:
students = []

while True:
student = input("Enter name: ")

if student == "0":
break

students.append(student)

print(students)

حالا اگر کاربر وارد کند:
Ali
Reza
Mohammad
0

وقتی 0 وارد شود:
if student == "0":
break

اجرا می‌شود و کل حلقه تمام می‌شود.
نتیجه:
['Ali', 'Reza', 'Mohammad']

خود 0 هم وارد لیست نمی‌شود.
🧠 حفظ کن:
break
↓
خروج کامل از حلقه 🛑



===================
🔄 8️⃣ continue
continue با break فرق دارد.
continue می‌گوید:
این تکرار را رها کن و برو سراغ تکرار بعدی.

مثلاً:
students = []

while len(students) < 5:
student = input("Enter name: ")

if student == "0":
continue

students.append(student)

print(students)

فرض کنیم:
Ali
0
Reza
Mohammad
...

وقتی 0 وارد شود:
continue

اجرا می‌شود.
یعنی:
این ورودی را بی‌خیال شو و دوباره برو اول حلقه.

پس 0 به لیست اضافه نمی‌شود، ولی حلقه تمام هم نمی‌شود.
تفاوت اصلی:
break
↓
کل حلقه تمام می‌شود 🛑

ولی:
continue
↓
فقط این دور از حلقه رد می‌شود
↓
دور بعدی 🔄




===========

9️⃣ مثال خیلی ساده برای تفاوت break و continue
break
for i in range(5):
if i == 3:
break

print(i)

خروجی:
0
1
2

وقتی به 3 رسید، کل حلقه تمام شد.

—————-
continue
for i in range(5):
if i == 3:
continue

print(i)

خروجی:
0
1
2
4

وقتی به 3 رسید:
فقط چاپ 3 را رد کرد و رفت سراغ 4



=====================

🟡 10️⃣ pass
pass یعنی:
فعلاً هیچ کاری انجام نده.

مثلاً:
for i in range(5):
if i == 3:
pass

print(i)

خروجی:
0
1
2
3
4

pass حلقه را متوقف نمی‌کند.
حتی تکرار را هم رد نمی‌کند.
فقط یک دستور خالی است.



pass
کجا کاربرد دارد؟
گاهی هنوز نمی‌دانیم قرار است داخل یک شرط یا تابع چه کدی بنویسیم.
مثلاً:
if score > 90:
pass
else:
print("Try again")
یعنی:
اگر نمره بیشتر از 90 شد، فعلاً هیچ کاری نکن.
بعداً می‌توانیم کد واقعی را جای pass بگذاریم.
My folder vip
🐍 فصل هفتم — پایتون مقدماتی — Control Flow Loops —————————————- Loop یعنی حلقه؛ یعنی یک قسمت از برنامه را چندین بار اجرا کنیم. مثلاً به جای اینکه 5 بار بنویسیم: print("Hello") print("Hello") print("Hello") print("Hello") print("Hello") می‌توانیم از حلقه استفاده…
🔐 یک مثال امنیتی
فرض کن می‌خواهیم IPها را بررسی کنیم:
ips = [
"192.168.1.10",
"192.168.1.20",
"192.168.1.30"
]

for ip in ips:

if ip == "192.168.1.20":
continue

print(f"Scanning {ip}")

خروجی:
Scanning 192.168.1.10
Scanning 192.168.1.30

IP دوم را Skip کردیم.
اگر به جای continue می‌نوشتیم:
break

به محض رسیدن به IP دوم، کل اسکن متوقف می‌شد.
این منطق در اسکریپت‌های شبکه و امنیت خیلی کاربردی است. 🔥
👍1
🐍 فصل هشتم — پایتون مقدماتی —Functions
—————————————-
1️⃣ Function چیست؟
Function یا تابع یک بخش از کد است که یک کار مشخص انجام می‌دهد و می‌توانیم هر وقت خواستیم آن را صدا بزنیم.
مثلاً:
def print_1_4():
print("1")
print("2")
print("3")
print("4")

print_1_4()

خروجی:
1
2
3
4

یعنی به جای اینکه این 4 خط را هر بار تکرار کنیم، یک بار داخل تابع می‌نویسیم و هر چند بار خواستیم:
print_1_4()

صدا می‌زنیم.
🧠 مفهوم اصلی
یک بار بنویس، هر چند بار خواستی استفاده کن.


———————-

2️⃣ ساختار Function
ساختار کلی:
def function_name():
# code

مثلاً:
def hello():
print("Hello")

⚠️ صرفاً تعریف تابع باعث اجرای آن نمی‌شود.
برای اجرا باید آن را Call کنیم:
hello()


——————————

3️⃣ تابع با Parameter
می‌توانیم اطلاعاتی را به تابع بدهیم.
مثلاً:
def plus(x):
print(x)

plus(5)

اینجا:
x → Parameter
5 → Argument

یعنی x یک جای خالی است که هنگام اجرای تابع مقدار می‌گیرد.
اگر:
plus(10)

باشد، x می‌شود 10.

———————————

4️⃣ return چیست؟
این قسمت خیلی مهم است. 🔥
return یعنی:
نتیجه تابع را به جایی که تابع را صدا زده‌ایم برگردان.

مثلاً:
def plus(x):
return x + 10

حالا:
a = plus(5)

print(a)

خروجی:
15

اینجا اتفاقی که افتاده:
plus(5)
↓
5 + 10
↓
15
↓
a

پس:
a = plus(5)

یعنی نتیجه‌ای که تابع return کرده داخل a ذخیره می‌شود.

————————

⚠️ تفاوت print و return
این دو را خیلی خوب یاد بگیر.
print
فقط نتیجه را نمایش می‌دهد:
def plus(x):
print(x + 10)

a = plus(5)

اینجا 15 چاپ می‌شود، اما تابع چیزی برای ذخیره کردن در a برنمی‌گرداند.
عملاً:
a = None


———————
return
نتیجه را برمی‌گرداند:
def plus(x):
return x + 10

a = plus(5)

print(a)

اینجا:
a = 15

🧠 حفظی:
print → نمایش بده 🖥

return → نتیجه را برگردان ↩️


——————————-

5️⃣ return اجرای تابع را تمام می‌کند
مثلاً:
def test():
print("A")
return
print("B")

خروجی:
A

چون بعد از return دیگر ادامه تابع اجرا نمی‌شود.

——————————

6️⃣ *args
حالا می‌رسیم به کدی که نوشتی:
def sum_all(*args):
total = 0

for num in args:
total += num

return total

اینجا *args یعنی:
تابع می‌تواند هر تعداد آرگومان دریافت کند.

مثلاً:
print(sum_all(1, 2, 3))

نتیجه:
6

یا:
print(sum_all(10, 20, 30, 40, 50))

نتیجه:
150

—————————-

*args داخل تابع چه شکلی است؟
مثلاً:
sum_all(10, 20, 30)

تقریباً می‌توانیم تصور کنیم:
args = (10, 20, 30)

یعنی args به شکل یک Tuple در اختیار تابع قرار می‌گیرد.
بعد:
for num in args:
total += num

یکی‌یکی اعداد را جمع می‌کند.


———————-

7️⃣ مثال کاربردی
فرض کن می‌خواهیم مجموع چند نمره را حساب کنیم:
def sum_scores(*scores):
total = 0

for score in scores:
total += score

return total

result = sum_scores(18, 19, 15, 20)

print(result)

خروجی:
72

—————————

🧵 بخش دوم — String Methods
حالا می‌رسیم به متدهای مهم String.
فرض کنیم:
name = "python programming"



8️⃣ lower()
همه حروف را کوچک می‌کند:
print(name.lower())

مثلاً:
PYTHON

تبدیل می‌شود به:
python



9️⃣ upper()
همه حروف را بزرگ می‌کند:
print(name.upper())

🔟 دسترسی به کاراکتر
print(name[0])

اولین کاراکتر را می‌دهد.
⚠️ Index از 0 شروع می‌شود.
مثلاً:
python
012345

پس:
name[0]  # p
name[1] # y
name[2] # t



1️⃣1️⃣ startswith()
بررسی می‌کند رشته با چه چیزی شروع می‌شود:
print(name.startswith("py"))

اگر شروع شود:
True

اگر شروع نشود:
False



1️⃣2️⃣ endswith()
بررسی می‌کند رشته با چه چیزی تمام می‌شود:
print(name.endswith("ing"))



1️⃣3️⃣ find()
موقعیت یک عبارت را پیدا می‌کند:
name = "python programming"

print(name.find("py"))

خروجی:
0

چون py از Index صفر شروع شده.

1️⃣4️⃣ index()
مثل find() موقعیت عبارت را پیدا می‌کند:
print(name.index("py"))

اما اگر پیدا نشود:
name.index("xyz")

❌ Error می‌دهد.
تفاوت:
find()
↓
پیدا نشد → -1

index()
↓
پیدا نشد → Error

این یکی را برای امتحان حتماً حفظ کن. 🔥


1️⃣5️⃣ split()
رشته را بر اساس یک جداکننده تقسیم می‌کند.
مثلاً:
name = "ali,reza,mohammad"

print(name.split(","))

خروجی:
['ali', 'reza', 'mohammad']

یعنی هر جا , دید، رشته را جدا کن.




1️⃣6️⃣ splitlines()
برای جدا کردن رشته بر اساس خط‌های جدید استفاده می‌شود.
مثلاً:
text = "Ali\nReza\nMohammad"

print(text.splitlines())

خروجی:
['Ali', 'Reza', 'Mohammad']
1️⃣7️⃣ strip()
فاصله‌های ابتدا و انتهای رشته را حذف می‌کند.
name = "   ali   "

print(name.strip())

نتیجه:
ali

می‌توانیم کاراکتر مشخص هم بدهیم:
text = ",,,ali,,,"

print(text.strip(","))

نتیجه:
ali
1️⃣8️⃣ rstrip()
فقط از سمت راست حذف می‌کند.
text = "ali,,,"

print(text.rstrip(","))

نتیجه:
ali



1️⃣9️⃣ swapcase()
حروف بزرگ را کوچک و حروف کوچک را بزرگ می‌کند:
text = "Ali PYTHON"

print(text.swapcase())

نتیجه:
aLI python

⚠️ swapcase() معمولاً آرگومان نمی‌گیرد.
یعنی:
text.swapcase()



2️⃣0️⃣ replace()
برای جایگزین کردن یک بخش از رشته:
name = "ali"

print(name.replace("a", "A"))

خروجی:
Ali

مثلاً:
text = "I like Python"

print(text.replace("Python", "Linux"))

خروجی:
I like Linux
My folder vip
1️⃣8️⃣ rstrip() فقط از سمت راست حذف می‌کند. text = "ali,,," print(text.rstrip(",")) نتیجه: ali 1️⃣9️⃣ swapcase() حروف بزرگ را کوچک و حروف کوچک را بزرگ می‌کند: text = "Ali PYTHON" print(text.swapcase()) نتیجه: aLI python ⚠️ swapcase() معمولاً آرگومان نمی‌گیرد.…
🔐 مثال کاربردی در امنیت
فرض کن ورودی کاربر را می‌گیریم و می‌خواهیم Username را استاندارد کنیم:
username = input("Enter username: ")

username = username.strip().lower()

print(username)

اگر کاربر وارد کند:
   ALI

نتیجه:
ali

این نوع پاک‌سازی و استانداردسازی ورودی‌ها در برنامه‌های واقعی خیلی کاربردی است.
🐍 فصل نهم — پایتون مقدماتی varuable scope
—————————————-
1️⃣ Variable Scope چیست؟
Scope یعنی محدوده‌ای از برنامه که در آن می‌توانیم به یک متغیر دسترسی داشته باشیم.
در پایتون متغیرها می‌توانند محدوده‌های مختلفی داشته باشند؛ مثلاً:
Local → متغیر محلی داخل تابع
Global → متغیر سراسری در سطح ماژول
Nonlocal → متغیر مربوط به تابع بیرونی در توابع تو در تو

————————

2️⃣ Local Variable — متغیر محلی
متغیری که داخل یک تابع تعریف می‌شود، به‌صورت پیش‌فرض Local است.
مثلاً:
def my_func():
x = 10
print(x)

my_func()

خروجی:
10

اینجا متغیر x داخل تابع تعریف شده و در محدوده همان تابع قابل دسترسی است.
اگر بیرون تابع به آن دسترسی پیدا کنیم:
def my_func():
x = 10

my_func()

print(x)

❌ خطا می‌گیریم:
NameError

چون x یک متغیر Local است و بیرون از تابع تعریف نشده.
نکته: متغیر Local معمولاً فقط در محدوده تابعی که داخل آن تعریف شده، قابل دسترسی است.

————————

3️⃣ Global Variable — متغیر سراسری
متغیری که خارج از توابع تعریف می‌شود، در سطح ماژول Global است.
مثلاً:
x = 10

def my_func():
print(x)

my_func()

خروجی:
10

چون تابع می‌تواند متغیر Global را بخواند.
اما اگر بخواهیم مقدار Global را داخل تابع تغییر دهیم چه؟
اینجا از کلمه کلیدی global استفاده می‌کنیم.
x = 5

def my_func():
global x
x = 10

my_func()

print(x)

خروجی:
10

با global x به پایتون می‌گوییم که منظورمان همان متغیر x در سطح ماژول است، نه یک متغیر محلی جدید.
پس مقدار متغیر اصلی تغییر می‌کند.
⚠️ دقت کن: اگر فقط بخواهیم مقدار Global را بخوانیم، معمولاً نیازی به global نداریم؛ این کلمه برای انتساب مجدد به متغیر Global استفاده می‌شود.

————————-

4️⃣ Nonlocal — متغیر در تابع بیرونی
حالا می‌رسیم به قسمت مهم جزوه‌ات! 🔥
nonlocal در توابع تو در تو (Nested Functions) کاربرد دارد.
فرض کن یک تابع داریم که داخل آن، تابع دیگری تعریف شده است.
def outer():
count = 0

def inner():
nonlocal count
count += 1
print(count)

inner()
inner()
inner()

outer()

خروجی:
1
2
3

بیایم خط‌به‌خط بررسی کنیم:
ابتدا تابع outer() اجرا می‌شود:
count = 0

بعد تابع inner() تعریف می‌شود.
داخل آن داریم:
nonlocal count

یعنی:
منظورم متغیر

count
متعلق به تابع بیرونی است؛ نمی‌خواهم یک متغیر محلی جدید بسازم.

سپس:
count += 1

در هر بار فراخوانی، مقدار count یکی افزایش پیدا می‌کند.
پس:
فراخوانی
مقدار count
بار اول
1
بار دوم
2
بار سوم
3
اگر nonlocal را حذف کنیم چه می‌شود؟
اگر داخل inner() بنویسیم:
def inner():
count += 1

پایتون خطای UnboundLocalError می‌دهد؛ چون count را به‌دلیل انتساب داخل تابع، Local در نظر می‌گیرد، اما قبل از مقداردهی محلی، تلاش می‌کنیم مقدارش را بخوانیم.
بنابراین برای تغییر متغیر تابع بیرونی از nonlocal استفاده می‌کنیم.

———————-

5️⃣ تفاوت Global و Nonlocal
این قسمت امتحانیه! 🎯
کلمه کلیدی
کاربرد
global
تغییر متغیر در سطح ماژول
nonlocal
تغییر متغیر در تابع بیرونیِ نزدیک‌تر
بدون این کلمات
انتساب به نام متغیر داخل تابع معمولاً آن را Local می‌کند
مثال ساده:
x = 10

def outer():
y = 20

def inner():
global x
nonlocal y

x = 100
y = 200

inner()

print(y)

outer()
print(x)

خروجی:
200
100

چرا؟
x با global به متغیر سطح ماژول اشاره می‌کند.
y با nonlocal به متغیر تابع outer() اشاره می‌کند.

———————
🐍 فصل دهم — پایتون مقدماتی Lambda Functions
—————————————-

1️⃣ اول از همه: تابع معمولی در Python
تا الان یاد گرفتیم با def تابع تعریف کنیم:
def square(x):
return x * x

print(square(5))

خروجی:
25

این تابع یک عدد می‌گیرد و مربع آن را برمی‌گرداند.
اما اگر بخواهیم یک تابع خیلی کوچک و ساده بنویسیم، می‌توانیم از Lambda استفاده کنیم.

———————

2️⃣ Lambda چیست؟
lambda یک روش برای ساختن تابع کوچک و بدون نام (Anonymous Function) است.
ساختار کلی:
lambda parameters: expression

مثلاً تابع بالا را با Lambda بنویسیم:
square = lambda x: x * x

print(square(5))

خروجی:
25

مقایسه تابع معمولی و Lambda
با def:
def square(x):
return x * x

با lambda:
square = lambda x: x * x

هر دو نتیجه یکسانی دارند.
نکته مهم امتحانی
در Lambda:
از کلمه کلیدی lambda استفاده می‌کنیم.
می‌تواند چند پارامتر داشته باشد.
فقط یک عبارت (Expression) دارد.
نتیجه عبارت به‌صورت خودکار برگردانده می‌شود؛ نیازی به return نیست.
مثلاً:
add = lambda a, b: a + b

print(add(10, 20))

خروجی:
30


————————

3️⃣ قبل از Lambda، تابع map()
تابع map() برای اجرای یک تابع روی تک‌تک اعضای یک مجموعه قابل پیمایش (Iterable) استفاده می‌شود.
مثلاً فرض کن لیستی از اعداد داریم و می‌خواهیم همه را دو برابر کنیم.
روش معمولی با for:
numbers = [1, 2, 3, 4, 5]

result = []

for num in numbers:
result.append(num * 2)

print(result)

خروجی:
[2, 4, 6, 8, 10]

حالا با map():
def double(x):
return x * 2

numbers = [1, 2, 3, 4, 5]

result = map(double, numbers)

print(list(result))

خروجی:
[2, 4, 6, 8, 10]

map() دقیقاً چه کار می‌کند؟
map(function, iterable)

یعنی:
تابع را روی هر عضو از مجموعه اجرا کن.

در این مثال:
map(double, numbers)

تقریباً یعنی:
double(1)
double(2)
double(3)
double(4)
double(5)

نکته: در Python 3، map() یک Iterator برمی‌گرداند؛ برای دیدن همه نتایج به شکل لیست، از list() استفاده می‌کنیم.

———————-

4️⃣ ترکیب map() با lambda
اینجا قدرت Lambda مشخص می‌شود! 🔥
به‌جای اینکه تابع جداگانه با def تعریف کنیم:
def double(x):
return x * 2

می‌توانیم مستقیم از Lambda استفاده کنیم:
numbers = [1, 2, 3, 4, 5]

result = map(lambda x: x * 2, numbers)

print(list(result))

خروجی:
[2, 4, 6, 8, 10]

این کد را چطور بخوانیم؟
map(lambda x: x * 2, numbers)

یعنی:
هر عدد از

numbers
را بگیر، در 2 ضرب کن و نتیجه را تولید کن.


———————-

5️⃣ تابع filter()
حالا فرض کنیم لیستی داریم و می‌خواهیم فقط اعداد زوج را از آن جدا کنیم.
اینجا از filter() استفاده می‌کنیم.
filter() اعضایی را نگه می‌دارد که نتیجه تابع شرطی برایشان True باشد.
روش معمولی با for:
numbers = [1, 2, 3, 4, 5, 6]

result = []

for num in numbers:
if num % 2 == 0:
result.append(num)

print(result)

خروجی:
[2, 4, 6]

روش با filter():
def is_even(x):
return x % 2 == 0

numbers = [1, 2, 3, 4, 5, 6]

result = filter(is_even, numbers)

print(list(result))

خروجی:
[2, 4, 6]


————————-

6️⃣ ترکیب filter() با lambda
حالا تابع is_even() را حذف می‌کنیم و مستقیماً Lambda می‌نویسیم:
numbers = [1, 2, 3, 4, 5, 6]

result = filter(lambda x: x % 2 == 0, numbers)

print(list(result))

خروجی:
[2, 4, 6]

این کد یعنی چه؟
filter(lambda x: x % 2 == 0, numbers)

یعنی:
از بین اعداد، فقط عددهایی را نگه دار که باقی‌مانده تقسیمشان بر 2 برابر صفر باشد.


——————————-
My folder vip
🐍 فصل دهم — پایتون مقدماتی Lambda Functions —————————————- 1️⃣ اول از همه: تابع معمولی در Python تا الان یاد گرفتیم با def تابع تعریف کنیم: def square(x): return x * x print(square(5)) خروجی: 25 این تابع یک عدد می‌گیرد و مربع آن را برمی‌گرداند. اما…
🔐 8️⃣ مثال کاربردی در شبکه و امنیت
فرض کن لیستی از پورت‌ها داریم و می‌خواهیم پورت‌های بالاتر از 1024 را جدا کنیم:

ports = [21, 22, 80, 443, 8080, 3306]

high_ports = filter(lambda port: port > 1024, ports)

print(list(high_ports))

خروجی:
[8080, 3306]

حالا با map() می‌توانیم پورت‌ها را به رشته تبدیل کنیم:

ports = [22, 80, 443]

result = map(lambda port: f"Port: {port}", ports)

print(list(result))

خروجی:
['Port: 22', 'Port: 80', 'Port: 443']

این‌ها مثال‌های ساده‌ای از پردازش داده‌ها در اسکریپت‌های شبکه هستند.
🐍 فصل یازدهم — پایتون مقدماتی Modules
—————————————-

Modules
| ماژول‌ها و کتابخانه‌ها
توی این فصل یاد می‌گیریم چطور از کدهایی که دیگران نوشته‌اند استفاده کنیم و چطور کدهای خودمون رو در فایل‌های جداگانه قرار بدیم تا بتونیم در پروژه‌های مختلف ازشون استفاده کنیم.
۱. ماژول (Module) چیست؟
ماژول در پایتون، به‌طور ساده، یک فایل پایتون با پسوند .py است که می‌تونه شامل متغیر، تابع و کلاس باشه.
مثلاً فرض کن یک تابع برای ضرب دو عدد نوشتیم. به‌جای اینکه هر بار این تابع رو در برنامه‌های مختلف بنویسیم، می‌تونیم اون رو داخل یک فایل قرار بدیم و هر جا خواستیم ازش استفاده کنیم.
مثال:
فایل mymath.py:
def multiply(a, b):
return a * b

حالا در یک فایل پایتون دیگه، مثلاً main.py، می‌تونیم از ماژول خودمون استفاده کنیم:
import mymath

result1 = mymath.multiply(3, 4)

print(result1)

خروجی:
12

نکته: برای اینکه پایتون فایل mymath.py رو پیدا کنه، معمولاً باید در مسیر قابل‌دسترسی برای پایتون، مثل پوشه فعلی پروژه، قرار داشته باشه.

——————-
۲. کتابخانه (Library) چیست؟

کتابخانه مجموعه‌ای از کدهای آماده است که برای انجام کارهای مشخصی در اختیار برنامه‌نویس قرار می‌گیره.

کتابخانه‌ها می‌تونن شامل چندین ماژول و بخش مختلف باشن.

برای مثال، پایتون ابزارهای آماده زیادی برای کار با تاریخ، ریاضیات، فایل‌ها و شبکه در اختیارمون قرار می‌ده.

——————-
۳. استفاده از ماژول‌های آماده با import
برای استفاده از یک ماژول، از دستور import استفاده می‌کنیم.
مثال اول: ماژول math
ماژول math توابع و مقادیر ریاضی آماده‌ای داره.
import math

print(math.sqrt(25))
print(math.pi)

خروجی:
5.0
3.141592653589793

توضیح:
math.sqrt(25) جذر ۲۵ رو محاسبه می‌کنه.
math.pi مقدار تقریبی عدد پی رو برمی‌گردونه.
چرا نوشتیم math.sqrt؟
چون تابع sqrt داخل ماژول math قرار داره.

———————
۴. کار با ماژول datetime
ماژول datetime برای کار با تاریخ و زمان استفاده می‌شه.
مثال:
import datetime

today = datetime.date.today()

print(today)

خروجی نمونه:
2026-09-21

دقت کن که در کد جزوه، tody() اشتباه تایپی بود و شکل صحیحش today() هست.
اینجا:
datetime ماژول ماست.
date برای کار با تاریخ استفاده می‌شه.
today() تاریخ امروز رو برمی‌گردونه.

——————-

۵. تغییر نام ماژول با as
گاهی اسم یک ماژول طولانیه یا می‌خوایم در کد کوتاه‌تر بنویسیم.
برای این کار از as استفاده می‌کنیم.
import datetime as dt

today = dt.date.today()

print(today)

در این مثال، به‌جای نوشتن datetime، از اسم کوتاه‌تر dt استفاده می‌کنیم.
مثال دیگر:
import math as m

print(m.sqrt(36))

خروجی:
6.0


—————

۶. وارد کردن یک تابع مشخص از ماژول
فرض کن فقط به تابع sqrt از ماژول math نیاز داریم.
می‌تونیم فقط همون تابع رو وارد کنیم:
from math import sqrt

print(sqrt(49))

خروجی:
7.0

در این حالت دیگه نیازی نیست بنویسیم:
math.sqrt(49)

چون تابع sqrt رو مستقیماً وارد کردیم.
وارد کردن چند تابع مشخص
from math import sqrt, pi

print(sqrt(64))
print(pi)



—————

۷. استفاده از from module import *
این دستور همه نام‌هایی رو که ماژول برای وارد کردن در دسترس قرار داده، وارد فضای نام فعلی برنامه می‌کنه.
from math import *

print(sqrt(81))
print(pi)

اما استفاده از import * معمولاً پیشنهاد نمی‌شه؛ چون ممکنه نام توابع یا متغیرها با هم تداخل پیدا کنه و مشخص نباشه هر تابع از کجا اومده.
روش‌های زیر معمولاً خواناتر هستن:
import math

یا:
from math import sqrt


————————

۸. مثال عملی — ساخت ماژول شخصی
فرض کن می‌خوایم چند تابع ریاضی بسازیم و در برنامه‌های مختلف ازشون استفاده کنیم.
فایل اول: mymath.py
def add(a, b):
return a + b


def multiply(a, b):
return a * b


def subtract(a, b):
return a - b

فایل دوم: main.py
حالا می‌تونیم کل ماژول رو وارد کنیم:
import mymath

print(mymath.add(10, 5))
print(mymath.multiply(3, 4))

خروجی:
15
12

یا فقط تابع موردنیاز رو وارد کنیم:
from mymath import add

print(add(10, 5))

خروجی:
15

نکته: هر دو فایل mymath.py و main.py رو در یک پوشه قرار بده تا این مثال به‌سادگی اجرا بشه.


—————————
My folder vip
🐍 فصل یازدهم — پایتون مقدماتی Modules —————————————- Modules | ماژول‌ها و کتابخانه‌ها توی این فصل یاد می‌گیریم چطور از کدهایی که دیگران نوشته‌اند استفاده کنیم و چطور کدهای خودمون رو در فایل‌های جداگانه قرار بدیم تا بتونیم در پروژه‌های مختلف ازشون استفاده…
ارتباط ماژول‌ها با امنیت و شبکه

ماژول‌ها کمک می‌کنن کدهای امنیتی و شبکه‌ای خودمون رو مرتب و قابل استفاده مجدد بنویسیم.
برای مثال، ماژول ipaddress در پایتون برای کار با آدرس‌های IP و شبکه‌ها استفاده می‌شه:
import ipaddress

ip = ipaddress.ip_address("192.168.1.10")

print(ip.version)

خروجی:
4

این کد مشخص می‌کنه آدرس واردشده از نوع IPv4 هست.
در پروژه‌های بزرگ‌تر، می‌تونیم توابع مربوط به اسکن شبکه، پردازش لاگ‌ها یا اعتبارسنجی IP رو در ماژول‌های جداگانه قرار بدیم و در برنامه اصلی ازشون استفاده کنیم.
🐍 فصل دوازدهم — پایتون مقدماتی Work With Files
—————————————-

توی این فصل یاد می‌گیریم چطور با پایتون فایل بسازیم، اطلاعات داخل فایل رو بخونیم، داخلش بنویسیم و در نهایت فایل رو به‌درستی ببندیم.

مثلاً فرض کن می‌خوایم با پایتون یک فایل لاگ برای ثبت رویدادهای یک سرور ایجاد کنیم؛ اینجا کار با فایل‌ها به دردمون می‌خوره.
————————-

۱. باز کردن فایل با open()
برای باز کردن یک فایل در پایتون از تابع open() استفاده می‌کنیم.
file = open("ali.txt", "r")

در این مثال:
open() فایل رو باز می‌کنه.
ali.txt اسم فایله.
"r" حالت باز کردن فایل برای خواندنه (Read).

————————

حالت‌های مهم باز کردن فایل
حالت
کاربرد
"r"
خواندن فایل؛ فایل باید از قبل وجود داشته باشه

"w"
نوشتن؛ اگر فایل وجود نداشته باشه ساخته می‌شه، اگر وجود داشته باشه محتویات قبلی پاک می‌شه

"a"
اضافه کردن محتوا به انتهای فایل، بدون پاک کردن محتوای قبلی

"b"
حالت باینری؛ معمولاً همراه حالت‌های دیگه استفاده می‌شه

"x"
ایجاد فایل جدید؛ اگر فایل از قبل وجود داشته باشه خطا می‌ده

مثلاً:
file = open("image.jpg", "rb")

اینجا فایل تصویری رو در حالت خواندن باینری باز می‌کنیم.
نکته: "b" به‌تنهایی معمولاً حالت کاملی برای باز کردن فایل نیست؛ معمولاً با "r" یا "w" ترکیب می‌شه، مثل "rb" و "wb".

———————

۲. خواندن اطلاعات فایل با read()
فرض کنیم فایل ali.txt این محتوا رو داره:
Hello Ali
Welcome to Python

برای خوندن کل محتویات فایل:
file = open("ali.txt", "r")

content = file.read()

print(content)

file.close()

خروجی:
Hello Ali
Welcome to Python

تابع read() محتوای فایل رو می‌خونه و به‌صورت رشته (str) برمی‌گردونه.
خواندن تعداد مشخصی از کاراکترها
file = open("ali.txt", "r")

content = file.read(5)

print(content)

file.close()

خروجی:
Hello

عدد 5 یعنی پنج کاراکتر اول فایل خونده بشه.
——————————-

۳. بستن فایل با close()
بعد از کار با فایل، باید اون رو ببندیم:
file.close()

چرا؟
چون فایل باز، منابع سیستم رو درگیر می‌کنه و بستن اون باعث می‌شه منابع آزاد بشن.
اما یک روش بهتر و حرفه‌ای‌تر هم وجود داره که جلوتر می‌بینیم.

——————
۴. خواندن فایل خط‌به‌خط با readline() و readlines()
روش اول: استفاده از readline()
متد readline() هر بار یک خط از فایل رو می‌خونه.
file = open("ali.txt", "r")

line1 = file.readline()
line2 = file.readline()

print(line1)
print(line2)

file.close()

هر بار که readline() اجرا می‌شه، به خط بعدی می‌ره.
روش دوم: استفاده از readlines()
متد readlines() تمام خطوط فایل رو می‌خونه و به شکل یک لیست برمی‌گردونه.
file = open("ali.txt", "r")

lines = file.readlines()

print(lines)

file.close()

خروجی نمونه:
['Hello Ali\n', 'Welcome to Python\n']

دقت کن که \n نشان‌دهنده کاراکتر رفتن به خط بعدیه.
روش سوم: استفاده از حلقه for (پیشنهادی)
برای خواندن فایل خط‌به‌خط، می‌تونیم مستقیماً روی فایل حلقه بزنیم:
file = open("ali.txt", "r")

for line in file:
print(line.strip())

file.close()

اینجا پایتون هر بار یک خط از فایل رو به متغیر line می‌ده.
اصلاح نکته جزوه: این کد:
for line in content.readline():

درست نیست؛ چون content معمولاً خروجی read() و یک رشته است و readline() متد فایل محسوب می‌شه. برای خواندن خط‌به‌خط، از for line in file: یا file.readlines() استفاده کن.

———————
۵. متد strip() چیست؟
وقتی از فایل خط می‌خونیم، ممکنه انتهای هر خط کاراکتر \n وجود داشته باشه.
برای حذف فاصله‌ها و کاراکترهای خالی ابتدا و انتهای رشته از strip() استفاده می‌کنیم:
text = "   Hello Ali\n"

print(text.strip())

خروجی:
Hello Ali

نکته مهم: strip() فقط وقتی اجرا بشه که با پرانتز نوشته شده باشه.
line.strip()

نه:
line.strip

حالت دوم فقط به خود متد اشاره می‌کنه و اون رو اجرا نمی‌کنه.


———————-
۶. نوشتن داخل فایل با write()
برای نوشتن در فایل از حالت "w" استفاده می‌کنیم.
file = open("ali.txt", "w")

file.write("Hi")

file.close()

اگر فایل وجود نداشته باشه، ساخته می‌شه.
اگر از قبل وجود داشته باشه، محتویات قبلی اون پاک می‌شه و اطلاعات جدید نوشته می‌شه.
نوشتن چند خط در فایل
file = open("ali.txt", "w")

file.write("Hello Ali\n")
file.write("Welcome to Python\n")
file.write("End")

file.close()

محتوای فایل:
Hello Ali
Welcome to Python
End

\n باعث می‌شه متن بعدی از خط جدید شروع بشه.


_————————

۷. اضافه کردن محتوا به انتهای فایل با a
فرض کن داخل فایل ali.txt از قبل اطلاعاتی داریم و نمی‌خوایم پاک بشن.
در این حالت از "a" (Append) استفاده می‌کنیم:
file = open("ali.txt", "a")

file.write("\nEnd\n")

file.close()

این دستور، متن End رو به انتهای فایل اضافه می‌کنه.
تفاوت مهم:
"w" محتویات قبلی رو پاک می‌کنه و از اول می‌نویسه.
"a" محتوای جدید رو به انتهای فایل اضافه می‌کنه.

——————————

۸. روش حرفه‌ای باز کردن فایل با with
در پایتون، استفاده از with open() روش پیشنهادی برای کار با فایله؛ چون بعد از پایان بلوک، فایل به‌صورت خودکار بسته می‌شه.
with open("ali.txt", "r") as file:
content = file.read()
print(content)

دیگه نیازی به نوشتن file.close() نیست.
مثال نوشتن با with
with open("ali.txt", "w") as file:
file.write("Hello Ali\n")
file.write("Python is great")

بعد از خروج از بلوک with، فایل به‌صورت خودکار بسته می‌شه.
My folder vip
🐍 فصل دوازدهم — پایتون مقدماتی Work With Files —————————————- توی این فصل یاد می‌گیریم چطور با پایتون فایل بسازیم، اطلاعات داخل فایل رو بخونیم، داخلش بنویسیم و در نهایت فایل رو به‌درستی ببندیم. مثلاً فرض کن می‌خوایم با پایتون یک فایل لاگ برای ثبت رویدادهای…
۹. مثال کاربردی امنیتی — ثبت لاگ
فرض کن می‌خوایم نتیجه یک بررسی امنیتی رو داخل فایل ثبت کنیم.
with open("security.log", "a") as file:
file.write("Login attempt detected\n")

هر بار که این کد اجرا بشه، پیام جدید به انتهای فایل security.log اضافه می‌شه.
این روش می‌تونه برای ذخیره رویدادهای برنامه، خطاها یا نتایج بررسی‌های امنیتی استفاده بشه.