آموزش برنامه‌نویسی پایتون و هوش مصنوعی
140 subscribers
358 photos
190 videos
41 files
172 links
🎯 یادگیری پایتون با رویکردی متفاوت
🚀 آموزش‌های کاملاً عملی و پروژه‌محور
💻 مسیر تبدیل شدن به یک برنامه‌نویس حرفه‌ای
🌟 فرقی نداره مبتدی هستی یا پیشرفته، از هر سطحی شروع کن و پایتون رو اصولی یاد بگیر
📩 ارتباط با ادمین: @YMahmoodian
09156519984
Download Telegram
if "l" in name: print("کاراکتر l وجود دارد")

شرط با عدد

بررسی عدد مثبت
جواب:

if x > 0: print("مثبت")

بررسی عدد منفی
جواب:

if x < 0: print("منفی")

بررسی صفر بودن
جواب:

if x == 0: print("صفر")

ترکیب شرط مثبت و زوج بودن
جواب:

if x > 0 and x % 2 == 0: print("مثبت و زوج")

شرط در یک خط (ternary)

مثال ساده
جواب:

status = "بالغ" if age >= 18 else "غیر بالغ"

ternary پیچیده
جواب:

category = "کوچک" if x < 10 else "متوسط" if x < 20 else "بزرگ"

شرط با Boolean

بررسی True
جواب:

flag = True if flag: print("True است")

بررسی False
جواب:

flag = False if not flag: print("False است")

استفاده از is و is not

بررسی هم‌هویتی
جواب:

if a is b: print("یکی هستند")

بررسی عدم هم‌هویتی
جواب:

if a is not b: print("یکی نیستند")

شرط و حلقه‌ها

if داخل حلقه for
جواب:

for x in range(5): if x % 2 == 0: print(x)

if داخل while
جواب:

x = 0 while x < 5: if x == 3: break x += 1

continue با if
جواب:

for i in range(5): if i == 2: continue print(i)

else در حلقه با if
جواب:

for i in range(3): print(i) else: print("پایان حلقه")

شرط و تابع

شرط در تابع
جواب:

def check_num(x): if x > 0: return "مثبت" else: return "منفی یا صفر"

شرط چندگانه در تابع
جواب:

def grade(score): if score >= 90: return "عالی" elif score >= 75: return "خوب" else: return "نیاز به تلاش"

شرط و ورودی کاربر

بررسی سن
جواب:

age = int(input("سن شما؟ ")) if age >= 18: print("بالغ") else: print("غیر بالغ")

شرط و مقدار None

بررسی None
جواب:

x = None if x is None: print("مقدار ندارد")

شرط و عملگرهای ترکیبی

شرط با and و or
جواب:

if x > 0 and (x < 5 or x > 10): print("شرط پیچیده")

شرط با not
جواب:

if not x > 0: print("منفی یا صفر")

شرط با ترکیب رشته و عدد
جواب:

if len(name) > 3 and age > 18: print("بررسی موفق")

شرط با لیست و حلقه

73. بررسی وجود عدد زوج در لیست
جواب:



numbers = [1, 3, 4, 7]
for n in numbers:
if n % 2 == 0:
print(f"{n} زوج است")

74. بررسی همه عناصر مثبت
جواب:



numbers = [1, 2, 3]
if all(n > 0 for n in numbers):
print("همه مثبت هستند")

75. بررسی حداقل یک عنصر منفی
جواب:



numbers = [1, -2, 3]
if any(n < 0 for n in numbers):
print("حداقل یک عدد منفی است")

شرط و رشته

76. بررسی طول رشته
جواب:



text = "Python"
if len(text) > 5:
print("طول بیشتر از ۵")

77. بررسی حروف بزرگ در رشته
جواب:



if text.isupper():
print("تمام حروف بزرگ")
else:
print("تمام حروف بزرگ نیست")

78. بررسی تمام حروف کوچک
جواب:



if text.islower():
print("تمام حروف کوچک")

79. بررسی عدد بودن رشته
جواب:



num_str = "123"
if num_str.isdigit():
print("اعداد است")

80. بررسی الفبایی بودن رشته
جواب:



word = "Hello"
if word.isalpha():
print("فقط حروف دارد")

شرط با دیکشنری

81. بررسی وجود کلید در دیکشنری
جواب:



person = {"name": "Ali"}
if "name" in person:
print("کلید وجود دارد")

82. بررسی عدم وجود کلید
جواب:



if "age" not in person:
print("کلید موجود نیست")

83. شرط روی مقدار کلید
جواب:



if person.get("name") == "Ali":
print("نام علی است")

شرط با تاپل

84. بررسی مقدار در تاپل
جواب:



colors = ("red", "green", "blue")
if "red" in colors:
print("قرمز موجود است")

85. شرط ترکیبی با لیست و تاپل
جواب:



if "red" in colors and "red" in ["red", "yellow"]:
print("موجود در هر دو")

شرط با مجموعه

86. بررسی عضویت در مجموعه
جواب:



fruits_set = {"سیب", "موز"}
if "سیب" in fruits_set:
print("وجود دارد")

87. شرط با عملیات مجموعه
جواب:



a = {1,2,3}
b = {3,4}
if a & b:
print("اشتراک دارند")

شرط پیچیده

88. ترکیب چند شرط با and, or, not
جواب:



x = 10
y = 5
if (x > y and y > 0) or not x == 0:
print("شرط درست است")

89. استفاده از شرط داخل لیست comprehension
جواب:



numbers = [1,2,3,4]
evens = [n for n in numbers if n % 2 == 0]
print(evens)

90. شرط با break و continue در حلقه
جواب:



for i in range(5):
if i == 2:
continue
if i == 4:
break
print(i)

شرط با ورودی کاربر پیشرفته

91. بررسی سن و جنسیت
جواب:



age = int(input("سن: "))
gender = input("جنسیت: ")
if age >= 18 and gender == "زن":
print("بالغ و زن")

92. شرط با تبدیل داده ورودی
جواب:



x = input("عدد: ")
if int(x) > 0:
print("مثبت")

شرط با مقایسه چندگانه

93. مقایسه متوالی
جواب:
if 0 < x < 10:
print("بین ۰ و ۱۰")

94. شرط با not در چندگانه
جواب:



if not (x < 0 or x > 10):
print("بین ۰ و ۱۰")

شرط با مقدارهای Boolean

95. ترکیب چند پرچم
جواب:



a = True
b = False
if a and not b:
print("شرط درست است")

96. شرط با مقدار محاسبه شده
جواب:



result = (x > 5)
if result:
print("بزرگتر از ۵")

شرط و شرط کوتاه (Inline)

97. استفاده در print
جواب:



print("مثبت" if x > 0 else "منفی یا صفر")

98. شرط با تابع
جواب:



def check(n): return "زوج" if n % 2 == 0 else "فرد"
print(check(7))

شرط با assert

99. استفاده از assert برای بررسی
جواب:



x = 10
assert x > 0, "عدد باید مثبت باشد"

100. ترکیب assert و شرط
جواب:



y = -5
assert y >= 0, "عدد منفی است"


---

با این ۱۰۰ سوال و جواب، فصل If statements به طور کامل پوشش داده شد.
۱۰۰ سوال فصل حلقه‌ها (Loops) با جواب و مثال کد کامل ارائه می‌شود.



فصل حلقه‌ها (Loops) – 100 سوال با جواب


---

بخش ۱: حلقه for ساده (سوال 1–20)

1. چاپ اعداد از 1 تا 5



for i in range(1, 6):
print(i)

جواب: 1 2 3 4 5

2. چاپ عناصر لیست [‘a’, ‘b’, ‘c’]



letters = ['a','b','c']
for l in letters:
print(l)

جواب: a b c

3. چاپ اعداد زوج بین 1 تا 10



for i in range(2,11,2):
print(i)

جواب: 2 4 6 8 10

4. جمع اعداد 1 تا 10 با حلقه for



total = 0
for i in range(1,11):
total += i
print(total)

جواب: 55

5. چاپ عناصر رشته “Python”



for ch in "Python":
print(ch)

جواب: P y t h o n

6. چاپ اعداد 5 تا 1 به صورت معکوس



for i in range(5,0,-1):
print(i)

جواب: 5 4 3 2 1

7. استفاده از enumerate برای چاپ ایندکس و مقدار



fruits = ['apple','banana','cherry']
for idx, val in enumerate(fruits):
print(idx, val)

جواب: 0 apple, 1 banana, 2 cherry

8. چاپ مربع اعداد 1 تا 5



for i in range(1,6):
print(i*i)

جواب: 1 4 9 16 25

9. چاپ کاراکترهای بزرگ رشته



for ch in "python":
print(ch.upper())

جواب: P Y T H O N

10. چاپ عناصر یک لیست با فاصله کاما



nums = [1,2,3]
for n in nums:
print(n, end=',')

جواب: 1,2,3,

11. ایجاد لیست اعداد 0 تا 9 با for



lst = []
for i in range(10):
lst.append(i)
print(lst)

جواب: [0,1,2,3,4,5,6,7,8,9]

12. چاپ حروف هر کلمه در لیست



words = ['hi','ok']
for w in words:
for ch in w:
print(ch)

جواب: h i o k

13. استفاده از range با شروع و پایان دلخواه



for i in range(3,8):
print(i)

جواب: 3 4 5 6 7

14. چاپ عناصر لیست به همراه اندیس



nums = [10,20,30]
for i in range(len(nums)):
print(i, nums[i])

جواب: 0 10, 1 20, 2 30

15. حلقه با شرط داخل for



for i in range(1,11):
if i%2==0:
print(i)

جواب: 2 4 6 8 10

16. چاپ عناصر لیست معکوس



lst = [1,2,3]
for i in reversed(lst):
print(i)

جواب: 3 2 1

17. استفاده از pass در حلقه



for i in range(3):
pass
print("Done")

جواب: Done

18. چاپ فقط حروف غیرعدد از رشته



s = "a1b2c3"
for ch in s:
if ch.isalpha():
print(ch)

جواب: a b c

19. حلقه با شرط else



for i in range(3):
print(i)
else:
print("Loop finished")

جواب: 0 1 2 Loop finished

20. چاپ هر دوم عنصر لیست



lst = [1,2,3,4,5]
for i in lst[::2]:
print(i)

جواب: 1 3 5


---

بخش ۲: حلقه while ساده (سوال 21–40)

21. چاپ اعداد 1 تا 5 با while



i=1
while i<=5:
print(i)
i+=1

جواب: 1 2 3 4 5

22. جمع اعداد 1 تا 10 با while



i=1
total=0
while i<=10:
total += i
i+=1
print(total)

جواب: 55

23. ورودی کاربر تا عدد صحیح وارد شود



num = 0
while num<=0:
num = int(input("Enter positive: "))

جواب: کاربر تا وارد کردن عدد مثبت حلقه ادامه می‌دهد

24. چاپ عناصر لیست با while



lst = ['a','b','c']
i=0
while i<len(lst):
print(lst[i])
i+=1

جواب: a b c

25. چاپ اعداد زوج 2 تا 10



i=2
while i<=10:
print(i)
i+=2

جواب: 2 4 6 8 10

26. حلقه while با شرط break



i=1
while True:
print(i)
if i==5:
break
i+=1

جواب: 1 2 3 4 5

27. چاپ کاراکترهای رشته با while



s="abc"
i=0
while i<len(s):
print(s[i])
i+=1

جواب: a b c

28. شمارش تعداد حروف در رشته



s="hello"
i=0
count=0
while i<len(s):
count+=1
i+=1
print(count)

جواب: 5

29. چاپ مربع اعداد 1 تا 5



i=1
while i<=5:
print(i*i)
i+=1

جواب: 1 4 9 16 25

30. حلقه while با else



i=0
while i<3:
print(i)
i+=1
else:
print("Done")

جواب: 0 1 2 Done

31. جمع عناصر لیست با while



lst=[1,2,3]
i=0
total=0
while i<len(lst):
total+=lst[i]
i+=1
print(total)

جواب: 6

32. حلقه while برای چاپ کاراکترهای بزرگ رشته



s="abc"
i=0
while i<len(s):
print(s[i].upper())
i+=1

جواب: A B C

33. چاپ اعداد 10 تا 1 معکوس



i=10
while i>0:
print(i)
i-=1

جواب: 10 9 8 7 6 5 4 3 2 1

34. حلقه while برای حذف صفرها از لیست



lst=[0,1,0,2]
while 0 in lst:
lst.remove(0)
print(lst)

جواب: [1,2]

35. چاپ عناصر زوج لیست با while



lst=[1,2,3,4,5]
i=0
while i<len(lst):
if lst[i]%2==0:
print(lst[i])
i+=1

جواب: 2 4

36. شمارش کاراکترهای خاص با while
s="a1b2"
i=0
count=0
while i<len(s):
if s[i].isdigit():
count+=1
i+=1
print(count)

جواب: 2

37. ورودی عدد تا برابر 5 وارد شود



n=0
while n!=5:
n=int(input("Enter 5: "))

جواب: کاربر تا وارد کردن 5 حلقه ادامه می‌دهد

38. چاپ اعداد مضرب 3 کمتر از 20



i=3
while i<20:
print(i)
i+=3

جواب: 3 6 9 12 15 18

39. حلقه while با continue



i=0
while i<5:
i+=1
if i==3:
continue
print(i)

جواب: 1 2 4 5

40. حلقه while با شرط ترکیبی



i=1
while i<=10 and i!=7:
print(i)
i+=1

جواب: 1 2 3 4 5 6


---
---

بخش ۳: break و continue (سوال 41–60)

41. حلقه for با break وقتی عدد 3 رسید



for i in range(1,6):
if i==3:
break
print(i)

جواب: 1 2

42. حلقه while با break



i=1
while i<=5:
if i==4:
break
print(i)
i+=1

جواب: 1 2 3

43. حلقه for با continue برای حذف عدد 2



for i in range(1,5):
if i==2:
continue
print(i)

جواب: 1 3 4

44. حلقه while با continue



i=0
while i<5:
i+=1
if i%2==0:
continue
print(i)

جواب: 1 3 5

45. حلقه for با break و else



for i in range(1,5):
if i==3:
break
print(i)
else:
print("Loop finished")

جواب: 1 2

46. حلقه for با continue و else



for i in range(1,5):
if i==3:
continue
print(i)
else:
print("Done")

جواب: 1 2 4 Done

47. حلقه while با break و else



i=0
while i<5:
print(i)
if i==3:
break
i+=1
else:
print("Finished")

جواب: 0 1 2 3

48. حلقه while با continue و else



i=0
while i<5:
i+=1
if i==2:
continue
print(i)
else:
print("Done")

جواب: 1 3 4 5 Done

49. چاپ اولین عدد زوج از لیست با break



lst=[1,3,4,5]
for n in lst:
if n%2==0:
print(n)
break

جواب: 4

50. چاپ همه عناصر غیر صفر با continue



lst=[0,1,0,2]
for n in lst:
if n==0:
continue
print(n)

جواب: 1 2

51. حلقه تو در تو: چاپ جدول ضرب 1 تا 3



for i in range(1,4):
for j in range(1,4):
print(i*j, end=' ')
print()

جواب:
1 2 3
2 4 6
3 6 9

52. حلقه تو در تو با شرط break



for i in range(1,4):
for j in range(1,4):
if i*j==4:
break
print(i*j, end=' ')
print()

جواب:
1 2 3
2

53. حلقه تو در تو با continue



for i in range(1,4):
for j in range(1,4):
if i*j==4:
continue
print(i*j, end=' ')
print()

جواب:
1 2 3
2 6
3 6 9

54. حلقه for روی رشته با break



for ch in "python":
if ch=='h':
break
print(ch)

جواب: p y t

55. حلقه for روی رشته با continue



for ch in "python":
if ch=='h':
continue
print(ch)

جواب: p y t o n

56. حلقه while روی رشته با break



s="abcde"
i=0
while i<len(s):
if s[i]=='c':
break
print(s[i])
i+=1

جواب: a b

57. حلقه while روی رشته با continue



s="abcde"
i=0
while i<len(s):
i+=1
if s[i-1]=='c':
continue
print(s[i-1])

جواب: a b d e

58. حلقه for روی لیست دیکشنری با break



people=[{'name':'Ali','age':20},{'name':'Sara','age':25}]
for p in people:
if p['age']>20:
break
print(p['name'])

جواب: Ali

59. حلقه for روی لیست دیکشنری با continue



people=[{'name':'Ali','age':20},{'name':'Sara','age':25}]
for p in people:
if p['age']>20:
continue
print(p['name'])

جواب: Ali

60. حلقه for روی مجموعه با break



s={1,2,3}
for n in s:
if n==2:
break
print(n)

جواب: بسته به ترتیب مجموعه، اولین عدد غیر 2 چاپ می‌شود


---

بخش ۴: حلقه تو در تو و ترکیب‌ها (سوال 61–80)

61. چاپ مثلث ستاره



for i in range(1,6):
for j in range(i):
print('*', end='')
print()

جواب:
*
**


---


---


---

62. چاپ مربع اعداد با nested loops



for i in range(1,4):
for j in range(1,4):
print(j*i, end=' ')
print()

جواب: مشابه سوال 51

63. حلقه تو در تو برای جمع عناصر دو لیست



a=[1,2]
b=[10,20]
for i in a:
for j in b:
print(i+j)

جواب: 11 21 12 22

64. حلقه تو در تو برای همه ترکیب‌های حروف



a=['x','y']
b=['1','2']
for i in a:
for j in b:
print(i+j)

جواب: x1 x2 y1 y2

65. حلقه تو در تو با شرط continue



for i in range(1,4):
for j in range(1,4):
if i==j:
continue
print(i,j)

جواب: 1 2 1 3 2 1 2 3 3 1 3 2

66. چاپ مستطیل ستاره با nested loop



for i in range(3):
for j in range(5):
print('*', end='')
print()

جواب: سه خط *

67. حلقه تو در تو با else



for i in range(3):
for j in range(2):
print(i,j)
else:
print("Inner done")

جواب:
0 0
0 1
Inner done
1 0
1 1
Inner done
2 0
2 1
Inner done

68. nested while loop ساده



i=1
while i<=2:
j=1
while j<=3:
print(i,j)
j+=1
i+=1
جواب: 1 1 1 2 1 3 2 1 2 2 2 3

69. چاپ اعداد مربعی با nested loops و شرط



for i in range(1,4):
for j in range(1,4):
if i==j:
continue
print(i*j)

جواب: 2 3 2 6 3 6

70. حلقه for روی دیکشنری با items



d={'a':1,'b':2}
for k,v in d.items():
print(k,v)

جواب: a 1 b 2

71. حلقه for روی دیکشنری فقط کلیدها



d={'x':5,'y':10}
for k in d:
print(k)

جواب: x y

72. حلقه for روی دیکشنری فقط مقادیر



d={'x':5,'y':10}
for v in d.values():
print(v)
سوال ۷۳ – حلقه for با شرط و جمع مقادیر زوج لیست

nums = [1, 2, 3, 4, 5, 6]
total = 0
for n in nums:
if n % 2 == 0:
total += n
print(total)

جواب:

12

توضیح:

حلقه for روی لیست nums می‌چرخد.

شرط if n % 2 == 0 مقادیر زوج را انتخاب می‌کند.

این مقادیر به متغیر total اضافه می‌شوند.

جمع اعداد زوج 2 + 4 + 6 = 12 است.






74. حلقه for روی لیست اعداد



nums = [1,2,3,4]
for n in nums:
print(n*2)

جواب: 2 4 6 8

75. حلقه while روی لیست



nums=[1,2,3]
i=0
while i<len(nums):
print(nums[i]+1)
i+=1

جواب: 2 3 4

76. حلقه for روی رشته و چاپ حروف بزرگ



s = "python"
for ch in s:
print(ch.upper())

جواب: P Y T H O N

77. حلقه while روی رشته و چاپ حروف غیر تکراری



s="hello"
i=0
seen=[]
while i<len(s):
if s[i] not in seen:
print(s[i])
seen.append(s[i])
i+=1

جواب: h e l o

78. حلقه for روی دیکشنری و چاپ کلیدهای بزرگ



d = {'a':1,'b':2}
for k in d.keys():
print(k.upper())

جواب: A B

79. حلقه for روی دیکشنری و مقادیر چند برابر



d={'x':2,'y':5}
for v in d.values():
print(v*10)

جواب: 20 50

80. حلقه for روی مجموعه با شرط



s={1,2,3,4}
for n in s:
if n%2==0:
print(n)

جواب: 2 4

81. حلقه while با شمارنده و break



i=0
while i<10:
if i==6:
break
print(i)
i+=2

جواب: 0 2 4

82. حلقه while با continue



i=0
while i<5:
i+=1
if i==3:
continue
print(i)

جواب: 1 2 4 5

83. حلقه for با enumerate روی رشته



s="abc"
for idx,ch in enumerate(s):
print(idx,ch)

جواب: 0 a 1 b 2 c

84. حلقه for با enumerate روی لیست



lst=[10,20,30]
for idx,val in enumerate(lst):
print(idx,val*2)

جواب: 0 20 1 40 2 60

85. حلقه for با zip دو لیست



a=[1,2,3]
b=[4,5,6]
for x,y in zip(a,b):
print(x+y)

جواب: 5 7 9

86. حلقه for روی رشته با شرط حروف صدادار



s="python"
for ch in s:
if ch in 'aeiou':
print(ch)

جواب: o

87. حلقه while با شمارش تعداد حروف



s="hello"
i=0
count=0
while i<len(s):
count+=1
i+=1
print(count)

جواب: 5

88. حلقه for با شرط و break روی لیست



nums=[1,3,5,4,6]
for n in nums:
if n%2==0:
print(n)
break

جواب: 4

89. حلقه for با شرط و continue روی لیست



nums=[1,2,3,4]
for n in nums:
if n%2!=0:
continue
print(n)

جواب: 2 4

90. حلقه تو در تو برای جمع ماتریس 2x2



matrix=[[1,2],[3,4]]
for row in matrix:
for val in row:
print(val)

جواب: 1 2 3 4

91. حلقه for روی لیست با شرط و else



nums=[1,2,3]
for n in nums:
print(n)
else:
print("Done")

جواب: 1 2 3 Done

92. حلقه while با شمارنده و else



i=0
while i<3:
print(i)
i+=1
else:
print("Finished")

جواب: 0 1 2 Finished

93. حلقه for روی رشته و skip حروف کوچک



s="PyThoN"
for ch in s:
if ch.islower():
continue
print(ch)

جواب: P T N

94. حلقه for روی رشته و stop روی حرف N



s="Python"
for ch in s:
if ch=="N":
break
print(ch)

جواب: P y t h o

95. حلقه while برای کاهش شمارنده تا صفر



i=5
while i>0:
print(i)
i-=1

جواب: 5 4 3 2 1

96. حلقه for با range معکوس



for i in range(5,0,-1):
print(i)

جواب: 5 4 3 2 1

97. حلقه while با شرط ترکیبی



i=0
while i<10 and i!=7:
print(i)
i+=2

جواب: 0 2 4 6

98. حلقه for روی رشته با index



s="abc"
for i in range(len(s)):
print(i,s[i])

جواب: 0 a 1 b 2 c

99. حلقه for روی دیکشنری و break



d={'a':1,'b':2}
for k,v in d.items():
if v==2:
break
print(k,v)

جواب: a 1

100. حلقه while با continue و شمارنده



i=0
while i<5:
i+=1
if i==3:
continue
print(i)

جواب: 1 2 4 5


---
بخش ۳: پیشرفته‌تر روی توابع (سوال 41–60)

41. تابع با آرگومان mutable و اثر آن بیرون



def add_item(lst):
lst.append(10)
mylist = [1,2]
add_item(mylist)
print(mylist)

جواب: [1,2,10]
توضیح: لیست mutable است و تغییرات داخل تابع روی لیست اصلی اعمال می‌شود.

42. تابع با آرگومان immutable



def increment(x):
x += 1
return x
num = 5
print(increment(num))
print(num)

جواب:

6
5

توضیح: عدد immutable است، مقدار اصلی تغییر نمی‌کند.

43. تابع با آرگومان string و تغییر آن



def add_text(s):
s += " world"
return s
txt = "Hello"
print(add_text(txt))
print(txt)

جواب:

Hello world
Hello

44. تابع با بازگشت چند نوع داده



def get_data():
return 1, "Ali", [1,2,3]
a,b,c = get_data()
print(a,b,c)

جواب: 1 Ali [1,2,3]

45. تابع با شرط و raise خطا



def check_positive(x):
if x<0:
raise ValueError("Negative!")
return x
print(check_positive(5))

جواب: 5

46. تابع بازگشتی ساده



def factorial(n):
if n==0:
return 1
return n*factorial(n-1)
print(factorial(5))

جواب: 120

47. تابع بازگشتی با شرط پیچیده



def fibonacci(n):
if n<=1:
return n
return fibonacci(n-1)+fibonacci(n-2)
print(fibonacci(6))

جواب: 8

48. تابع lambda ساده



f = lambda x: x*3
print(f(4))

جواب: 12

49. تابع lambda با چند آرگومان



f = lambda x,y: x+y
print(f(5,7))

جواب: 12

50. تابع lambda داخل تابع دیگر



def make_multiplier(n):
return lambda x: x*n
double = make_multiplier(2)
print(double(5))

جواب: 10

51. تابع با map و lambda



nums = [1,2,3]
result = list(map(lambda x: x**2, nums))
print(result)

جواب: [1,4,9]

52. تابع با filter و lambda



nums = [1,2,3,4]
evens = list(filter(lambda x: x%2==0, nums))
print(evens)

جواب: [2,4]

53. تابع با reduce (import functools)



from functools import reduce
nums = [1,2,3,4]
total = reduce(lambda x,y: x+y, nums)
print(total)

جواب: 10

54. تابع با list comprehension داخل تابع



def square_list(lst):
return [x**2 for x in lst]
print(square_list([1,2,3]))

جواب: [1,4,9]

55. تابع با شرط داخل list comprehension



def evens(lst):
return [x for x in lst if x%2==0]
print(evens([1,2,3,4,5]))

جواب: [2,4]

56. تابع با enumerate در list comprehension



def even_index(lst):
return [v for i,v in enumerate(lst) if i%2==0]
print(even_index([10,20,30,40]))

جواب: [10,30]

57. تابع با zip



names = ["Ali","Sara"]
ages = [25,30]
for n,a in zip(names,ages):
print(n,a)

جواب:

Ali 25
Sara 30

58. تابع با unpacking آرایه در آرگومان



def add(a,b,c):
return a+b+c
nums = [1,2,3]
print(add(*nums))

جواب: 6

59. تابع با unpacking dict در آرگومان



def describe(name, age):
print(name, age)
info = {"name":"Ali","age":25}
describe(**info)

جواب: Ali 25

60. تابع با decorator ساده



def decorator(func):
def wrapper():
print("Before")
func()
print("After")
return wrapper
@decorator
def say_hello():
print("Hello")
say_hello()

جواب:

Before
Hello
After


---
بخش ۴: پیشرفته – ترکیب مفاهیم و سناریوهای پیچیده (سوال 61–80)
61. تابع بازگشتی با شرط توقف غیرساده
def countdown(n): print(n) if n > 0: countdown(n-1) countdown(3)
جواب:
3 2 1 0
62. تابع بازگشتی معکوس رشته
def reverse(s): if s == "": return "" return reverse(s[1:]) + s[0] print(reverse("abc"))
جواب:
cba
63. تابع با default parameter
def greet(name="Guest"): print("Hello", name) greet() greet("Ali")
جواب:
Hello Guest Hello Ali
64. پارامتر پیش‌فرض mutable (خطرناک!)
def add_num(num, lst=[]): lst.append(num) return lst print(add_num(1)) print(add_num(2))
جواب:
[1] [1, 2]
توضیح: لیست پیش‌فرض بین فراخوانی‌ها مشترک است.
65. جلوگیری از مشکل بالا
def add_num(num, lst=None): if lst is None: lst = [] lst.append(num) return lst print(add_num(1)) print(add_num(2))
جواب:
[1] [2]
*66. تابع با args
def total(*numbers): return sum(numbers) print(total(1,2,3))
جواب: 6
**67. تابع با kwargs
def info(**data): for k,v in data.items(): print(k, v) info(name="Ali", age=25)
جواب:
name Ali age 25
**68. ترکیب *args و kwargs
def func(*args, **kwargs): print(args) print(kwargs) func(1,2, name="Ali", age=25)
جواب:
(1, 2) {'name': 'Ali', 'age': 25}
69. تابع بازگشتی جمع لیست
def sum_list(lst): if not lst: return 0 return lst[0] + sum_list(lst[1:]) print(sum_list([1,2,3]))
جواب: 6
70. تابع بازگشتی حداکثر در لیست
def max_list(lst): if len(lst) == 1: return lst[0] m = max_list(lst[1:]) return m if m > lst[0] else lst[0] print(max_list([1,9,3]))
جواب: 9
71. تابع بازگشتی بررسی palindrome
def is_palindrome(s): if len(s) <= 1: return True return s[0] == s[-1] and is_palindrome(s[1:-1]) print(is_palindrome("madam"))
جواب: True
72. تابع با inner function
def outer(): def inner(): print("Hello from inner") inner() outer()
جواب:
Hello from inner
73. تابع که تابع برمی‌گرداند
def make_adder(n): def adder(x): return x + n return adder add5 = make_adder(5) print(add5(10))
جواب: 15
74. closure با شمارنده
def counter(): count = 0 def inc(): nonlocal count count += 1 return count return inc c = counter() print(c()) print(c())
جواب:
1 2
75. تابع generator ساده
def gen_numbers(): yield 1 yield 2 yield 3 for n in gen_numbers(): print(n)
جواب:
1 2 3
76. generator با شرط
def even_gen(n): for i in range(n): if i % 2 == 0: yield i print(list(even_gen(6)))
جواب: [0, 2, 4]
77. استفاده از yield from
def sub_gen(): yield 1 yield 2 def main_gen(): yield from sub_gen() yield 3 print(list(main_gen()))
جواب: [1, 2, 3]
78. تابع با annotation نوع داده
def add(x: int, y: int) -> int: return x + y print(add(2,3))
جواب: 5
79. تابع با docstring
def greet(): """این تابع سلام می‌کند.""" print("Hello") print(greet.__doc__)
جواب:
این تابع سلام می‌کند.
80. تابع با بازگشت تابع ناشناس
def power(n): return lambda x: x**n square = power(2) print(square(5))
جواب: 25
بخش ۵: پیشرفته – سناریوهای خاص و نکات حرفه‌ای (سوال 81–100)

81. تابع بازگشتی برای شمارش عناصر لیست چندلایه

def count_elements(lst):
total = 0
for i in lst:
if isinstance(i, list):
total += count_elements(i)
else:
total += 1
return total
print(count_elements([1,[2,3],[4,[5]]]))

جواب: 5


---

82. تابع با تابع کمکی (helper) داخلی

def factorial(n):
def helper(x):
if x == 0:
return 1
return x * helper(x-1)
return helper(n)
print(factorial(4))

جواب: 24


---

83. تابع که از global استفاده می‌کند

count = 0
def inc():
global count
count += 1
inc()
inc()
print(count)

جواب: 2


---

84. تابع با keyword-only arguments

def greet(*, name):
print("Hello", name)
greet(name="Sara")

جواب: Hello Sara


---

85. تابع با positional-only arguments (Python 3.8+)

def add(a, b, /):
return a + b
print(add(3, 4))

جواب: 7


---

86. تابع که خودش را از طریق globals صدا می‌زند

def call_self(n):
if n > 0:
print(n)
globals()['call_self'](n-1)
call_self(3)

جواب:

3
2
1


---

87. تابع با decorator که ورودی و خروجی را چاپ می‌کند

def log(func):
def wrapper(*args, **kwargs):
print("Args:", args)
result = func(*args, **kwargs)
print("Result:", result)
return result
return wrapper
@log
def add(a, b):
return a + b
add(2, 5)

جواب:

Args: (2, 5)
Result: 7


---

88. تابع با multiple decorators

def deco1(func):
def wrapper():
print("deco1 start")
func()
print("deco1 end")
return wrapper

def deco2(func):
def wrapper():
print("deco2 start")
func()
print("deco2 end")
return wrapper

@deco1
@deco2
def say_hi():
print("Hi")

say_hi()

جواب:

deco1 start
deco2 start
Hi
deco2 end
deco1 end


---

89. تابع که تابع دیگر را به عنوان پارامتر می‌گیرد

def execute(func):
func()
execute(lambda: print("Hello"))

جواب: Hello


---

90. تابع که چندین مقدار را با return برمی‌گرداند و unpack می‌کند

def calc(a, b):
return a+b, a*b
s, m = calc(3, 4)
print(s, m)

جواب:
7 12


---

91. تابع که با recursion عدد را به باینری تبدیل می‌کند

def to_binary(n):
if n == 0:
return ""
return to_binary(n // 2) + str(n % 2)
print(to_binary(5))

جواب: 101


---

92. تابع generator بی‌نهایت

def infinite_numbers():
n = 0
while True:
yield n
n += 1
gen = infinite_numbers()
print(next(gen))
print(next(gen))

جواب:

0
1


---

93. تابع که list comprehension را برمی‌گرداند

def squares(n):
return [x**2 for x in range(n)]
print(squares(4))

جواب: [0, 1, 4, 9]


---

94. تابع که dict comprehension را برمی‌گرداند

def mapping(n):
return {x: x**2 for x in range(1, n+1)}
print(mapping(3))

جواب: {1: 1, 2: 4, 3: 9}


---

95. تابع که set comprehension را برمی‌گرداند

def unique_squares(lst):
return {x**2 for x in lst}
print(unique_squares([1,2,2,3]))

جواب: {1, 4, 9}


---

96. تابع با استفاده از any

def has_even(lst):
return any(x % 2 == 0 for x in lst)
print(has_even([1,3,5,8]))

جواب: True


---

97. تابع با استفاده از all

def all_positive(lst):
return all(x > 0 for x in lst)
print(all_positive([1,2,3]))

جواب: True


---

98. تابع که با recursion طول لیست را پیدا می‌کند

def length(lst):
if not lst:
return 0
return 1 + length(lst[1:])
print(length([1,2,3]))

جواب: 3


---

99. تابع که خودش را n بار صدا می‌زند

def repeat(func, n):
if n <= 0:
return
func()
repeat(func, n-1)
repeat(lambda: print("Hi"), 3)

جواب:

Hi
Hi
Hi


---

100. تابع که exception را درون خودش مدیریت می‌کند

def divide(a, b):
try:
return a / b
except ZeroDivisionError:
return "Cannot divide by zero"
print(divide(10, 2))
print(divide(5, 0))

جواب:

5.0
Cannot divide by zero
فصل مدیریت فایل‌ها


---

فصل مدیریت فایل‌ها – ۱۰۰ سؤال


---

بخش ۱: ساده (سوال 1–20)

1. باز کردن و خواندن کل فایل

f = open("test.txt", "r")
print(f.read())
f.close()


---

2. خواندن بخشی از فایل

f = open("test.txt", "r")
print(f.read(5))
f.close()


---

3. خواندن یک خط

f = open("test.txt", "r")
print(f.readline())
f.close()


---

4. خواندن همه خطوط به صورت لیست

f = open("test.txt", "r")
print(f.readlines())
f.close()


---

5. حلقه روی خطوط فایل

f = open("test.txt", "r")
for line in f:
print(line.strip())
f.close()


---

6. نوشتن در فایل (حالت w)

f = open("new.txt", "w")
f.write("Hello World")
f.close()


---

7. اضافه کردن به فایل (حالت a)

f = open("new.txt", "a")
f.write("\nNew line")
f.close()


---

8. ایجاد فایل خالی (حالت x)

f = open("empty.txt", "x")
f.close()


---

9. استفاده از with برای خواندن

with open("test.txt", "r") as f:
print(f.read())


---

10. استفاده از with برای نوشتن

with open("new.txt", "w") as f:
f.write("Hi there")


---

11. بررسی وجود فایل با try

try:
f = open("test.txt", "r")
print(f.read())
f.close()
except FileNotFoundError:
print("File not found")


---

12. خواندن فایل باینری

with open("image.png", "rb") as f:
data = f.read()
print(type(data))


---

13. نوشتن فایل باینری

data = b"hello"
with open("data.bin", "wb") as f:
f.write(data)


---

14. تعیین encoding

with open("utf.txt", "w", encoding="utf-8") as f:
f.write("سلام")


---

15. خواندن فایل با encoding

with open("utf.txt", "r", encoding="utf-8") as f:
print(f.read())


---

16. پاک کردن محتوای فایل

open("test.txt", "w").close()


---

17. شمارش تعداد خطوط

with open("test.txt", "r") as f:
print(len(f.readlines()))


---

18. خواندن بدون خط جدید

with open("test.txt", "r") as f:
print(f.read().strip())


---

19. چک کردن writable بودن

with open("test.txt", "w") as f:
print(f.writable())


---

20. چک کردن readable بودن

with open("test.txt", "r") as f:
print(f.readable())


---
21. خواندن خط به خط با enumerate

with open("test.txt", "r") as f:
for i, line in enumerate(f, start=1):
print(i, line.strip())


---

22. نوشتن چند خط با writelines

lines = ["Line1\n", "Line2\n"]
with open("multi.txt", "w") as f:
f.writelines(lines)


---

23. خواندن و strip کردن هر خط

with open("test.txt", "r") as f:
print([line.strip() for line in f])


---

24. بررسی وجود فایل با os.path

import os
print(os.path.exists("test.txt"))


---

25. گرفتن سایز فایل

import os
print(os.path.getsize("test.txt"))


---

26. گرفتن مسیر کامل فایل

import os
print(os.path.abspath("test.txt"))


---

27. حذف فایل

import os
os.remove("test.txt")


---

28. تغییر نام فایل

import os
os.rename("old.txt", "new.txt")


---

29. کپی فایل

import shutil
shutil.copy("a.txt", "b.txt")


---

30. جابجایی فایل

import shutil
shutil.move("b.txt", "folder/b.txt")


---

31. خواندن فقط ۱۰ کاراکتر اول

with open("test.txt", "r") as f:
print(f.read(10))


---

32. رفتن به موقعیت خاص در فایل

with open("test.txt", "r") as f:
f.seek(5)
print(f.read())


---

33. گرفتن موقعیت فعلی

with open("test.txt", "r") as f:
f.read(4)
print(f.tell())


---

34. باز کردن فایل فقط خواندنی

f = open("test.txt", "rt")
print(f.mode)
f.close()


---

35. باز کردن فایل فقط نوشتنی

f = open("write.txt", "wt")
print(f.mode)
f.close()


---

36. باز کردن فایل فقط append

f = open("append.txt", "at")
print(f.mode)
f.close()


---

37. بستن خودکار با with

with open("test.txt") as f:
print(f.closed)
print(f.closed)


---

38. خواندن فایل خط‌به‌خط و حذف خط خالی

with open("test.txt", "r") as f:
for line in f:
if line.strip():
print(line.strip())


---

39. نوشتن شماره خط قبل از محتوا

with open("test.txt", "r") as f:
lines = f.readlines()
with open("out.txt", "w") as f:
for i, line in enumerate(lines, 1):
f.write(f"{i}: {line}")


---

40. الحاق محتوا از یک فایل به فایل دیگر

with open("a.txt", "r") as f1, open("b.txt", "a") as f2:
f2.write(f1.read())


---

بخش ۳: پیشرفته (سوال 41–60)

41. کار با JSON – ذخیره

import json
data = {"name": "Ali", "age": 25}
with open("data.json", "w") as f:
json.dump(data, f)


---

42. کار با JSON – خواندن

import json
with open("data.json", "r") as f:
obj = json.load(f)
print(obj)


---

43. کار با CSV – نوشتن

import csv
rows = [["Name", "Age"], ["Ali", 25]]
with open("people.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(rows)


---

44. کار با CSV – خواندن

import csv
with open("people.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
print(row)


---

45. کار با Pickle – ذخیره

import pickle
data = [1, 2, 3]
with open("data.pkl", "wb") as f:
pickle.dump(data, f)


---

46. کار با Pickle – خواندن

import pickle
with open("data.pkl", "rb") as f:
obj = pickle.load(f)
print(obj)


---

47. شمارش تعداد کاراکترها در فایل

with open("test.txt", "r") as f:
print(len(f.read()))


---

48. شمارش تعداد کلمات

with open("test.txt", "r") as f:
print(len(f.read().split()))


---

49. شمارش تعداد خطوط غیرخالی

with open("test.txt", "r") as f:
print(sum(1 for line in f if line.strip()))


---

50. جستجو یک کلمه در فایل

word = "Ali"
with open("test.txt", "r") as f:
print(any(word in line for line in f))


---

51. جایگزینی متن در فایل

with open("test.txt", "r") as f:
data = f.read().replace("old", "new")
with open("test.txt", "w") as f:
f.write(data)


---

52. معکوس کردن خطوط فایل

with open("test.txt", "r") as f:
lines = f.readlines()
with open("test.txt", "w") as f:
f.writelines(lines[::-1])


---

53. نوشتن شماره خط و تعداد کاراکتر

with open("test.txt", "r") as f:
for i, line in enumerate(f, 1):
print(i, len(line.strip()))


---

54. پیدا کردن طولانی‌ترین خط

with open("test.txt", "r") as f:
print(max(f, key=len))


---

55. حذف خطوط تکراری

with open("test.txt", "r") as f:
lines = list(dict.fromkeys(f))
with open("test.txt", "w") as f:
f.writelines(lines)


---

56. ادغام چند فایل متنی
files = ["a.txt", "b.txt"]
with open("merged.txt", "w") as out:
for file in files:
with open(file, "r") as f:
out.write(f.read() + "\n")


---

57. کپی باینری با read/write

with open("img.png", "rb") as f1, open("copy.png", "wb") as f2:
f2.write(f1.read())


---

58. نوشتن لیست در فایل با join

lst = ["a", "b", "c"]
with open("letters.txt", "w") as f:
f.write("\n".join(lst))


---

59. خواندن و تبدیل به لیست اعداد

with open("nums.txt", "r") as f:
nums = [int(x) for x in f.read().split()]
print(nums)


---

60. ساخت فایل log

with open("log.txt", "a") as f:
f.write("Event happened\n")
61. استفاده از pathlib برای خواندن فایل

from pathlib import Path
print(Path("test.txt").read_text())


---

62. استفاده از pathlib برای نوشتن فایل

from pathlib import Path
Path("hello.txt").write_text("Hello World")


---

63. بررسی وجود فایل با pathlib

from pathlib import Path
print(Path("test.txt").exists())


---

64. گرفتن پسوند فایل

from pathlib import Path
print(Path("data.csv").suffix)


---

65. گرفتن نام فایل بدون پسوند

from pathlib import Path
print(Path("data.csv").stem)


---

66. لیست‌کردن همه فایل‌های پوشه

from pathlib import Path
for file in Path(".").iterdir():
print(file)


---

67. پیدا کردن همه فایل‌های txt در پوشه

from pathlib import Path
for file in Path(".").glob("*.txt"):
print(file)


---

68. پیدا کردن فایل‌های txt در همه زیرپوشه‌ها

from pathlib import Path
for file in Path(".").rglob("*.txt"):
print(file)


---

69. تغییر نام فایل با pathlib

from pathlib import Path
Path("old.txt").rename("new.txt")


---

70. حذف فایل با pathlib

from pathlib import Path
Path("delete.txt").unlink()


---

71. خواندن فایل خط‌به‌خط با pathlib

from pathlib import Path
for line in Path("test.txt").read_text().splitlines():
print(line)


---

72. ترکیب مسیرها با / در pathlib

from pathlib import Path
p = Path("folder") / "file.txt"
print(p)


---

73. بررسی اینکه مسیر فایل است یا پوشه

from pathlib import Path
print(Path("test.txt").is_file())
print(Path(".").is_dir())


---

74. گرفتن اندازه فایل با pathlib

from pathlib import Path
print(Path("test.txt").stat().st_size)


---

75. گرفتن تاریخ آخرین تغییر

from pathlib import Path
import datetime
time = Path("test.txt").stat().st_mtime
print(datetime.datetime.fromtimestamp(time))


---

76. خواندن و حذف فاصله‌ها از هر خط

with open("test.txt") as f:
print([line.strip() for line in f])


---

77. کپی فایل با pathlib + shutil

from pathlib import Path
import shutil
shutil.copy(Path("a.txt"), Path("b.txt"))


---

78. ذخیره‌سازی دیکشنری به JSON با indent

import json
data = {"a": 1, "b": 2}
with open("data.json", "w") as f:
json.dump(data, f, indent=4)


---

79. خواندن فایل CSV به لیست دیکشنری‌ها

import csv
with open("people.csv", "r") as f:
reader = csv.DictReader(f)
print(list(reader))


---

80. نوشتن لیست دیکشنری‌ها در CSV

import csv
rows = [{"Name": "Ali", "Age": 25}, {"Name": "Sara", "Age": 30}]
with open("people.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["Name", "Age"])
writer.writeheader()
writer.writerows(rows)


---

بخش ۵: ترکیبی و حرفه‌ای (سوال 81–100)

81. خواندن لاگ و فیلتر خط‌های دارای ERROR

with open("log.txt") as f:
for line in f:
if "ERROR" in line:
print(line.strip())


---

82. شمارش تعداد تکرار یک کلمه در فایل

word = "Python"
with open("test.txt") as f:
print(f.read().count(word))


---

83. ادغام همه فایل‌های txt در یک فایل

from pathlib import Path
with open("merged.txt", "w") as out:
for file in Path(".").glob("*.txt"):
out.write(file.read_text() + "\n")


---

84. ایجاد فایل بکاپ قبل از ویرایش

import shutil
shutil.copy("data.txt", "data_backup.txt")


---

85. خواندن بزرگ‌ترین فایل در یک پوشه

from pathlib import Path
print(max(Path(".").iterdir(), key=lambda p: p.stat().st_size))


---

86. حذف همه فایل‌های خالی

from pathlib import Path
for file in Path(".").glob("*"):
if file.is_file() and file.stat().st_size == 0:
file.unlink()


---

87. ذخیره متن ورودی کاربر در فایل

text = input("Enter text: ")
with open("user.txt", "w") as f:
f.write(text)


---

88. خواندن اولین n خط فایل

n = 3
with open("test.txt") as f:
for i in range(n):
print(f.readline().strip())


---

89. خواندن آخرین n خط فایل

n = 2
with open("test.txt") as f:
lines = f.readlines()
print(lines[-n:])


---

90. چک کردن دسترسی خواندن/نوشتن فایل

import os
print(os.access("test.txt", os.R_OK))
print(os.access("test.txt", os.W_OK))


---

91. نوشتن داده باینری از ورودی کاربر

data = b"12345"
with open("bin.bin", "wb") as f:
f.write(data)


---

92. خواندن فایل JSON و چاپ مقدار خاص
import json
with open("data.json") as f:
data = json.load(f)
print(data["name"])


---

93. جستجو رشته در چند فایل

from pathlib import Path
for file in Path(".").glob("*.txt"):
if "Python" in file.read_text():
print(file)


---

94. پیدا کردن طولانی‌ترین کلمه در فایل

with open("test.txt") as f:
words = f.read().split()
print(max(words, key=len))


---

95. ذخیره داده با فرمت YAML

import yaml
data = {"name": "Ali", "age": 25}
with open("data.yaml", "w") as f:
yaml.dump(data, f)


---

96. خواندن داده از YAML

import yaml
with open("data.yaml") as f:
print(yaml.safe_load(f))


---

97. تبدیل JSON به CSV

import json, csv
with open("data.json") as f:
data = json.load(f)
with open("data.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(data.keys())
writer.writerow(data.values())


---

98. خواندن CSV و ذخیره در JSON

import csv, json
with open("people.csv") as f:
reader = csv.DictReader(f)
data = list(reader)
with open("people.json", "w") as f:
json.dump(data, f)


---

99. خواندن و مرتب‌سازی خطوط فایل

with open("test.txt") as f:
lines = sorted(f.readlines())
with open("sorted.txt", "w") as f:
f.writelines(lines)


---

100. مدیریت خطا هنگام باز کردن فایل

try:
with open("nofile.txt") as f:
print(f.read())
except FileNotFoundError:
print("File not found!")
فصل خطاها و استثناها (Exceptions)

ساختار فصل





---

بخش ۱ – ساده (سوال ۱ تا ۲۰)

1. گرفتن خطای تقسیم بر صفر

try:
x = 5 / 0
except ZeroDivisionError:
print("Cannot divide by zero")

2. گرفتن خطای مقدار نامعتبر در int

try:
x = int("abc")
except ValueError:
print("Invalid integer")

3. گرفتن خطای باز کردن فایل غیر موجود

try:
f = open("nofile.txt")
except FileNotFoundError:
print("File not found")

4. گرفتن چند نوع خطا در یک except

try:
num = int("abc")
except (ValueError, TypeError):
print("Error in conversion")

5. استفاده از متغیر خطا

try:
1 / 0
except ZeroDivisionError as e:
print("Error:", e)

6. استفاده از else در try-except

try:
x = int("10")
except ValueError:
print("Error")
else:
print("Success:", x)

7. استفاده از finally برای بستن فایل

try:
f = open("data.txt", "w")
f.write("Hello")
finally:
f.close()
print("File closed")

8. گرفتن خطای IndexError

try:
nums = [1, 2]
print(nums[5])
except IndexError:
print("Index out of range")

9. گرفتن خطای KeyError

try:
d = {"a": 1}
print(d["b"])
except KeyError:
print("Key not found")

10. گرفتن خطای TypeError

try:
print(5 + "hi")
except TypeError:
print("Type mismatch")

11. گرفتن خطای NameError

try:
print(x)
except NameError:
print("Variable not defined")

12. جلوگیری از قطع برنامه با try-except

try:
1 / 0
except ZeroDivisionError:
print("Handled error, program continues")
print("End")

13. تست چندین except جداگانه

try:
int("abc")
except ValueError:
print("Value error")
except TypeError:
print("Type error")

14. گرفتن خطای AttributeError

try:
None.append(1)
except AttributeError:
print("No such attribute")

15. گرفتن خطای ImportError

try:
import non_existing_module
except ImportError:
print("Module not found")

16. گرفتن خطای OverflowError

try:
import math
math.exp(1000)
except OverflowError:
print("Number too large")

17. گرفتن خطای MemoryError

try:
x = [1] * (10**10)
except MemoryError:
print("Out of memory")

18. گرفتن خطای IOError

try:
f = open("/root/test.txt", "r")
except IOError:
print("Cannot open file")

19. گرفتن خطای UnicodeDecodeError

try:
with open("file.txt", encoding="ascii") as f:
print(f.read())
except UnicodeDecodeError:
print("Encoding error")

20. گرفتن خطای RuntimeError

try:
raise RuntimeError("Custom runtime error")
except RuntimeError as e:
print("Caught:", e)

21. استفاده از pass برای نادیده گرفتن خطا

try:
1 / 0
except ZeroDivisionError:
pass
print("Program continues")

22. چاپ نوع خطا با type()

try:
int("abc")
except Exception as e:
print(type(e))

23. گرفتن همه خطاها با Exception

try:
x = undefined_var
except Exception:
print("Some error occurred")

24. گرفتن خطا و پیامش با str(e)

try:
int("abc")
except Exception as e:
print("Error:", str(e))

25. استفاده از چندین except و else

try:
num = int("10")
except ValueError:
print("Invalid")
else:
print("OK:", num)

26. استفاده از چندین except و finally

try:
5 / 0
except ValueError:
print("Value error")
except ZeroDivisionError:
print("Divide by zero")
finally:
print("Done")

27. گرفتن خطای توقف حلقه با KeyboardInterrupt

try:
while True:
pass
except KeyboardInterrupt:
print("Stopped by user")

28. مدیریت خطا در تابع

def divide(a, b):
try:
return a / b
except ZeroDivisionError:
return None
print(divide(5, 0))

29. بازگرداندن مقدار پیش‌فرض در خطا

def to_int(s):
try:
return int(s)
except ValueError:
return 0
print(to_int("abc"))

30. استفاده از assert و گرفتن AssertionError

try:
assert 2 + 2 == 5
except AssertionError:
print("Assertion failed")

31. گرفتن خطای بازگشتی بیش از حد (RecursionError)

def f():
f()
try:
f()
except RecursionError:
print("Max recursion depth reached")

32. گرفتن خطای StopIteration

it = iter([1])
try:
next(it)
next(it)
except StopIteration:
print("No more items")

33. استفاده از try در لیست‌کامپری‌هنشن
data = ["1", "x", "2"]
nums = [int(x) if x.isdigit() else 0 for x in data]
print(nums)

34. گرفتن خطای ValueError هنگام تبدیل لیست

data = ["10", "abc", "20"]
for x in data:
try:
print(int(x))
except ValueError:
print("Invalid:", x)

35. گرفتن خطای AttributeError در کلاس

class Test:
pass
try:
Test().hello()
except AttributeError:
print("No such method")

36. گرفتن خطای FileExistsError

import os
try:
os.mkdir("folder")
os.mkdir("folder")
except FileExistsError:
print("Folder exists")

37. گرفتن خطای PermissionError

try:
with open("/root/test.txt", "w") as f:
f.write("Hi")
except PermissionError:
print("Permission denied")

38. گرفتن خطای ModuleNotFoundError

try:
import not_a_module
except ModuleNotFoundError:
print("Module not found")

39. گرفتن خطای LookupError (پایه برای IndexError/KeyError)

try:
{}["x"]
except LookupError:
print("Lookup error")

40. گرفتن خطای ArithmeticError (پایه برای ZeroDivisionError)

try:
1 / 0
except ArithmeticError:
print("Arithmetic error")

41. استفاده از raise برای ایجاد خطا

x = -5 if x < 0: raise ValueError("x must be positive")

42. ایجاد خطای سفارشی با کلاس جدید

class MyError(Exception): pass raise MyError("Custom error occurred")

43. ایجاد خطای سفارشی و گرفتن آن

class MyError(Exception): pass try: raise MyError("Something wrong") except MyError as e: print(e)

44. استفاده از raise در تابع

def check_age(age): if age < 18: raise ValueError("Underage") check_age(15)

45. پرتاب خطا داخل except دیگر

try: int("abc") except ValueError: raise TypeError("Wrong type")

46. استفاده از from برای زنجیره خطاها

try: int("abc") except ValueError as e: raise RuntimeError("Failed") from e

47. خطای assert و پیام سفارشی

assert 2 + 2 == 4, "Math is broken!"

48. استفاده از finally حتی با raise

try: raise ValueError finally: print("Always runs")

49. گرفتن چند خطا با یک except tuple

try: x = int("abc") except (ValueError, TypeError): print("Value or type error")

50. بازنشر خطا با raise بدون آرگومان

try: 1 / 0 except ZeroDivisionError: print("Logging...") raise

51. استفاده از warnings برای هشدار

import warnings warnings.warn("This is a warning", UserWarning)

52. تبدیل هشدار به استثنا

import warnings warnings.simplefilter("error") warnings.warn("Will become error", UserWarning)

53. گرفتن TypeError

try: "a" + 1 except TypeError: print("Type error")

54. گرفتن خطای ImportError

try: from math import unknown_func except ImportError: print("Import error")

55. استفاده از try/except تو در تو

try: try: 1 / 0 except ZeroDivisionError: print("Inner error") except Exception: print("Outer error")

56. استفاده از متغیر خطا خارج از except

try: 1 / 0 except ZeroDivisionError as e: err = e print(err)

57. استفاده از sys.exc_info()

import sys try: 1 / 0 except: print(sys.exc_info())

58. مدیریت خطا در لیست‌پردازی

data = ["1", "x", "2"] nums = [] for s in data: try: nums.append(int(s)) except ValueError: nums.append(0) print(nums)

59. استفاده از contextlib.suppress()

from contextlib import suppress with suppress(FileNotFoundError): open("nofile.txt")

60. بستن منابع حتی با خطا

try: f = open("test.txt") 1 / 0 finally: f.close()

بخش ۴ – ترکیبی و حرفه‌ای (سوال ۶۱ تا ۸۰)

61. مدیریت چند عملیات حساس با یک try

try: a = int("10") b = a / 0 except (ValueError, ZeroDivisionError) as e: print("Error:", e)

62. ایجاد خطای سفارشی با پارامترهای بیشتر

class InputError(Exception): def init(self, value, message): self.value = value self.message = message super().init(message) raise InputError(10, "Invalid input")

63. استفاده از raise در شرط

x = None if x is None: raise RuntimeError("x is required")

64. مدیریت خطا در باز کردن فایل

try: with open("nofile.txt") as f: print(f.read()) except FileNotFoundError: print("File not found")

65. ایجاد خطای منطقی خودکار

def divide(a, b): if b == 0: raise ZeroDivisionError return a / b

66. استفاده از assert برای ورودی‌ها

def factorial(n): assert n >= 0, "n must be non-negative" return 1 if n == 0 else n * factorial(n - 1)

67. زنجیره خطاهای سفارشی
class ErrorA(Exception): pass class ErrorB(Exception): pass try: raise ErrorA except ErrorA as e: raise ErrorB from e

68. تبدیل همه خطاها به RuntimeError

try: int("abc") except Exception as e: raise RuntimeError from e

69. خطا در comprehension با try داخلی

data = ["1", "x"] nums = [int(x) if x.isdigit() else 0 for x in data]

70. استفاده از logging برای ثبت خطا

import logging try: 1 / 0 except ZeroDivisionError: logging.exception("Error occurred")

71. جلوگیری از خطا با isinstance

x = "5" if isinstance(x, int): print(x + 1) else: print("Not int")

72. گرفتن MemoryError

try: x = "a" * (10**10) except MemoryError: print("Out of memory")

73. استفاده از atexit برای تمیزکاری

import atexit atexit.register(lambda: print("Cleaning up")) raise RuntimeError

74. گرفتن خطای OSError

import os try: os.remove("nofile.txt") except OSError as e: print("OS error:", e)

75. گرفتن خطای RuntimeError

try: raise RuntimeError("Something bad happened") except RuntimeError as e: print(e)

76. گرفتن خطای ValueError در map

data = ["1", "x", "2"] try: list(map(int, data)) except ValueError as e: print(e)

77. مدیریت خطا در yield generator

def gen(): try: yield 1 / 0 except ZeroDivisionError: yield 0 print(list(gen()))

78. بازگرداندن پیام خطا به کاربر

def safe_div(a, b): try: return a / b except ZeroDivisionError as e: return str(e) print(safe_div(1, 0))

79. استفاده از exit هنگام خطا

import sys try: raise ValueError except ValueError: sys.exit("Fatal error")

80. مدیریت خطای JSON

import json try: json.loads("{bad json}") except json.JSONDecodeError: print("Invalid JSON")

بخش ۵ – فوق‌پیشرفته و ترکیبی (سوال ۸۱ تا ۱۰۰)

81. گرفتن خطا در چند سطح تابع

def a(): b() def b(): c() def c(): 1 / 0 try: a() except ZeroDivisionError: print("Caught")

82. گرفتن خطای UnicodeDecodeError

try: open("file.txt", encoding="ascii").read() except UnicodeDecodeError: print("Encoding error")

83. خطای UnicodeEncodeError

try: "سلام".encode("ascii") except UnicodeEncodeError: print("Cannot encode")

84. گرفتن خطای IndexError و پیام

try: [1, 2][5] except IndexError as e: print(e)

85. گرفتن خطای KeyError با مقدار پیش‌فرض

d = {"a": 1} try: print(d["b"]) except KeyError: print("Default value")

86. مدیریت چند خطا در حلقه بزرگ

items = [1, 0, "x"] for i in items: try: print(10 / i) except (TypeError, ZeroDivisionError) as e: print("Error:", e)

87. خطا در بازکردن URL

import urllib.request try: urllib.request.urlopen("http://invalid.url") except Exception as e: print("URL error:", e)

88. بازنشر خطا بعد از لاگ کردن

try: 1 / 0 except ZeroDivisionError as e: print("Logging:", e) raise

89. گرفتن خطا در threading

import threading def task(): raise ValueError t = threading.Thread(target=task) t.start() t.join() print("Thread done (error not caught here)")

90. گرفتن خطا در multiprocessing

from multiprocessing import Process def task(): raise ValueError p = Process(target=task) p.start() p.join() print("Process ended")

91. استفاده از try در context manager

class MyCM: def enter(self): return self def exit(self, exc_type, exc, tb): print("Error type:", exc_type) with MyCM(): 1 / 0

92. جلوگیری از توقف برنامه با except گسترده

while True: try: 1 / int(input("Number: ")) except: print("Error")

93. ذخیره جزئیات خطا در فایل

import traceback try: 1 / 0 except: with open("error.log", "w") as f: traceback.print_exc(file=f)

94. استفاده از traceback.format_exc()

import traceback try: 1 / 0 except: print(traceback.format_exc())

95. خطای EOFError در ورودی

try: input() except EOFError: print("No input")

96. خطای OverflowError

try: import math math.exp(1000) except OverflowError: print("Too large")

97. گرفتن خطای NotImplementedError

def f(): raise NotImplementedError try: f() except NotImplementedError: print("Not implemented")

98. گرفتن خطای ZeroDivisionError در float

try: 1.0 / 0.0 except ZeroDivisionError: print("Float division by zero")

99. گرفتن خطای socket

import socket try: socket.socket().connect(("invalid", 80)) except Exception as e: print("Socket error:", e)

100. گرفتن تمام خطاها و ادامه کار
for x in [1, 0, "x"]: try: print(10 / x) except Exception as e: print("Error:", e)
فصل کلاس‌ها و شیءگرایی (OOP)

بخش ۱ – مفاهیم پایه کلاس (سوال ۱ تا ۲۰)
1. تعریف یک کلاس ساده
class Person: pass
2. ایجاد شی از کلاس
class Person: pass p = Person()
3. افزودن ویژگی به شی بعد از ایجاد
class Person: pass p = Person() p.name = "Ali"
4. متد سازنده init
class Person: def __init__(self, name): self.name = name
5. ایجاد دو شی با مقادیر متفاوت
p1 = Person("Ali") p2 = Person("Sara")
6. افزودن متد به کلاس
class Person: def say_hello(self): print("Hello!")
7. متد با استفاده از ویژگی داخلی
class Person: def __init__(self, name): self.name = name def greet(self): print(f"Hello {self.name}")
8. تغییر ویژگی بعد از ساخت شی
p = Person("Ali") p.name = "Reza"
9. حذف ویژگی با del
del p.name
10. متد با پارامتر ورودی
class Calculator: def add(self, x, y): return x + y
11. استفاده از self برای دسترسی به ویژگی‌ها
class Counter: def __init__(self): self.count = 0 def inc(self): self.count += 1
12. ایجاد ویژگی پیش‌فرض
class Person: def __init__(self, name="Unknown"): self.name = name
13. نماstrار شی با __str__
class Person: def __init__(self, name): self.name = name def __str__(self): return f"Person({self.name})"
14. استفاده از __repr__ برای نreprی
class Person: def __repr__(self): return "Person object"
15. مقایسه اinit_eq__
class Person: def __init__(self, name): self.name = name def __eq__(self, other): return self.name == other.name
16. شمارش تعداد اشیای ساinitclass Person: count = 0 def __init__(self): Person.count += 1
17. ویژگی کلاس در مقابل ویژگی شی
class A: x = 10 a1 = A() a2 = A() a1.x = 20
18. پاک کردن ویژگی کلاس
del A.x
19. استفاده از docstring در کلاس
class Person: """This class represents a person."""
20. بررسی نوع شی با isinstance
isinstance(p, Person)
21. متد کلاس (@classmethod)
class MyClass: count = 0 @classmethod def inc(cls): cls.count += 1
22. استفاده از متد کلاس برای ساخت شی
class Person: def __init__(self, name): self.name = name @classmethod def from_list(cls, names): return [cls(name) for name in names]
23. متد استاتیک (@staticmethod)
class Math: @staticmethod def add(a, b): return a + b
24. تفاوت متد استاتیک و کلاس
Math.add(2, 3) # بدون نیاز به self یا cls
25. ویژگی خصوصی با دو خط زیر
class Person: def __init__(self, name): self.__name = name
26. متد خصوصی با دو خط زیر
class Person: def __secret(self): print("Hidden")
27. دسترسی به ویژگی خصوصی با name mangling
p._Person__name
28. ویژگی فقط خواندنی با property
class Person: def __init__(self, age): self._age = age @property def age(self): return self._age
29. ویژگی خواندنی/نوشتنی با setter
class Person: @property def name(self): return self._name @name.setter def name(self, value): self._name = value
30. حذف ویژگی با deleter
class Person: @property def name(self): return self._name @name.deleter def name(self): del self._name
31. شمارش اشیا با متد کلاس
class Person: count = 0 def __init__(self): Person.count += 1 @classmethod def total(cls): return cls.count
32. اضافه کردن ویژگی به صورت داینامیک
p = Person() setattr(p, "age", 25)
33. گرفتن مقدار ویژگی به صورت داینامیک
getattr(p, "age")
34. بررسی وجود ویژگی
hasattr(p, "age")
35. حذف ویژگی داینامیک
delattr(p, "age")
36.dirه از متد __dir__
dir(p)
37. ذخیره‌سازی همه اشیا در یک لیست
class Person: all_objects = [] def __init__(self): Person.all_objects.append(self)
38. شمdictویژdict __dict__
p.__dict__
39. تغییر ویژگی کلاس در تمام اشیا
Person.count = 100
40. تعریف متدهای متعدد برای یک کلاس
class Person: def greet(self): pass def walk(self): pass
بخش ۳ – وراثت و چندریختی (سوال 41 تا 60)
41. تعریف کلاس فرزند
class Animal: pass class Dog(Animal): pass
42. وراثت سازنده والد
class Animal: def __init__(self, name): self.name = name class Dog(Animal): def __init__(self, name, breed): super().__init__(name) self.breed = breed
43. متد override در کلاس فرزند
class Dog(Animal): def speak(self): print("Woof!")
44. استفاده از super() برای فراخوانی متد والد
class Dog(Animal): def speak(self): super().speak() print("Woof!")
45. چندریختی با متد مشترک
for animal in [Dog(), Cat()]: animal.speak()
46. چند وراثتی
class A: pass class B: pass class C(A, B): pass
47. ترتیب جستجوی متدها (MRO)
C.mro()
48. متد کلاس والد در چند وراثتی
super(A, self).method()
49. کلاس انتزاعی با abc
from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass
50. پیاده‌سازی کلاس انتزاعی
class Circle(Shape): def area(self): return 3.14 * r * r
51. استفاده از متدهای انتزاعی در چندریختی
shapes = [Circle(), Square()] for s in shapes: print(s.area())
52. جلوگیری از وراثت باinit
class Final(type): def __init__(cls, name, bases, attrs): for base in bases: if isinstance(base, Final): raise TypeError("Can't inherit")
53. ارث‌برbasesای کلاس والد
print(Dog.__bases__)
54. اضافه کردن ویژگی به والد و دیدن در فرزند
Animal.legs = 4
55. تغییر ویژگی کلاس والد از فرزند
Dog.legs = 3
56. استفاده از isinstance برای بررسی نوع فرزند
isinstance(Dog(), Animal)
57. استفاده از issubclass برای بررسی وراثت
issubclass(Dog, Animal)
58. چندریختی با __str__
print([str(obj) for obj in [Dog(), Cat()]])
59. سازنده خالی در کلاس فرزند
class Dog(Animal): pass
60. متد والد بدون تغییر در فرزند
Dog().parent_method()
بخش ۴ – ویژگی‌های پیشرفته (سوال 61 add61. استفاده از متدهinitی __add__
class Vector: def __init__(self, x): self.x = x def __add__(self, other): return Vector(self.x + other.x)
62. متد جادویی __len__
def __len__(self): return len(self.items)
63. متد جادویی __getitem__
def __getitem__(self, index): return self.data[index]
64. متد جادویی __setitem__