خانه توسعهدهنده تکنولوژی بکاند پایتون 19 نمونه سوال برنامه نویسی پایتون که باید در 2024 بدانید + جوابهای عملی
19 نمونه سوال برنامه نویسی پایتون که باید در 2024 بدانید + جوابهای عملی
پایتون توسط Guido van Rossum و اولین بار در 20 فوریه 1991 معرفی شد. این زبان یکی از پرکاربردترین زبانهای برنامهنویسی است؛ زیرا درعینحال در زمینههای گوناگونی ازجمله Data Science، هوش مصنوعی، یادگیری ماشین و توسعه وب بهکار میرود. انعطافپذیری پایتون منجربه افزایش روزافزون محبوبیت آن شده است. علاوهبر این، با توجه به گسترش قابلیتهای هوش مصنوعی و ظهور پلتفرمهای جدید، بسیاری از شرکتها در پی استخدام برنامهنویسان پایتون هستند.
بههمیندلیل، در این مقاله از کوئرا بلاگ، به بررسی 30 نمونه سوال برنامه نویسی پایتون در دستهبندیهای مختلف خواهیم پرداخت و هرکدام را همراهبا جوابهای عملی با کدهای واقعی نشان خواهیم داد.
فهرست مطالب
Toggle7 سوال مصاحبه پایتون برای تازه کارها
در این بخش، به بررسی هفت نمونه سوال برنامه نویسی پایتون برای مبتدیان خواهیم پرداخت و هرکدام را با کدهای قابل پیادهسازی ارائه میدهیم.
1. تفاوت Shallow Copy و Deep Copy در پایتون چیست؟
Deepcopy یک شی متفاوت را میسازد و آن را با اشیا فرزند شی اصلی پر میکند. بنابراین، تغییرات در شی اصلی در کپی آن نمودی نخواهد داشت.
برای نوشتن یک کپی از نوع Deep، باید از متد ()copy.deepcopy استفاده کنیم.
از طرفی دیگر، Shallow Copy یک شی متفاوت ایجاد میکند و آن را با ارجاعات اشیا فرزند در شی اصلی پر میکند. بنابراین، تغییرات در شی اصلی در کپی آن هم اعمال میشود.
دستور ایجاد یک کپی سطحی در پایتون، ()copy.copy است.
بیشتر بخوانید: 13 مورد از سوالات مصاحبه برنامه نویسی پایتون براساس سطح و حوزه
2. چگونه Multithreading در پایتون بهدست میآید؟
Multithreading بهطور معمول به این معنی است که چند رشته بهطور همزمان اجرا میشوند. مفسر عمومی پایتون به بیش از یک رشته اجازه نمیدهد که همزمان در آن واحد اجرا شوند. بنابراین multithreading در پایتون از طریق Context Switching بهدست میآید. این عملکرد بهطور کامل متفاوت از چندپردازشی است که چندین فرآیند را بهصورت موازی اجرا میکند
3. معماری جنگو چیست و چگونه عمل میکند؟
جنگو یک فریمورک وب است که برای ساخت صفحات سایت استفاده میشود. معماری آن به شرح زیر است:
- Template: الگو بخش قابل مشاهده صفحات وبسایت است؛
- Model: بخش سمت سرور که دادهها در آن ذخیره میشوند؛
- View: بدرخواستها را پردازش میکند، دادهها را از مدل دریافت میکند و به قالب ارسال میکند تا صفحات وب ایجاد شوند.
4. آرایه Numpy چه مزیتی نسبتبه لیست تودرتو دارد؟
Numpy به زبان C نوشته شده است. بههمیندلیل تمام پیچیدگیهای آن در یک ماژول ساده رفع میشود. از سوی دیگر، لیستها بهصورت پویا تایپ میشوند. بنابراین پایتون باید هربار که از عنصری استفاده میکند، نوع داده آن را بررسی کند. این عمل باعث میشود تا آرایههای Numpy بسیار سریعتر از لیستها باشند.
بیشتر بخوانید: بهترین کتابخانه های پایتون که باید بشناسید – فهرست ۲۶ کتابخانه ضروری برای Python
5. Pickling و Unpickling در پایتون چیست؟
Pickling | Unpickling |
– تبدیل سلسلهمراتب اشیا پایتون به استریم بایت را pickling میگویند؛- این فرآیند بهعنوان سریالسازی (Serialization) نیز شناخته میشود. | – تبدیل یک استریم بایت به سلسلهمراتب شی پایتون را unpickling میگویند؛از Unpickling بهعنوان Deserialization یا معکوس کردن فرآیند سریالسازی هم یاد میشود. |
6. مدیریت حافظه در پایتون چگونه است؟
پایتون یک فضای خصوصی (Private Heap Space) دارد که همه اشیا را در خود ذخیره میکند. بخش مدیریت حافظه در پایتون جنبههای مختلف این فضا را تنظیم میکند؛ مانند اشتراکگذاری اشیا، کش کردن دادهها، تقسیمبندی و تخصیص وظایف به توابع. کاربر هیچ کنترلی روی این فضا ندارد و فقط مفسر پایتون میتواند به آن دسترسی داشته باشد.
7. آیا آرگومانها در پایتون با مقدار ارسال میشوند یا مرجع؟
آرگومانها در پایتون توسط یک مرجع (Reference) ارسال میشوند؛ یعنی هر تغییری که در یک تابع ایجاد میشود، در شی اصلی هم اجرا میشود. مثال زیر را ببینید:
در تصویر سمت چپ، ما فقط یک مقدار را به عنصری از ‘l’ اختصاص دادیم. بنابراین خروجی [3، 2، 3، 4] است.
در تصویر سمت راست، یک شی کاملا جدید برای ‘l’ ایجاد کردیم؛ اما، مقادیر [3، 2، 3، 4] در خروجی نشان داده نمیشوند؛ زیرا خارج از تعریف تابع هستند.
بیشتر بخوانید: رسم نمودار در پایتون بههمراه آموزش کتابخانه Matplotlib و Seaborn
7 نمونه سوال برنامه نویسی پایتون برای برنامه نویسان متوسط
در این بخش، به هفت نمونه سوال برنامه نویسی پایتون میپردازیم که برای درک و ارائه پاسخ صحیح به آنها، باید از کدهای پایتون استفاده کنیم.
1. چگونه مشخص میکنید که همه کاراکترهای یک رشته از نوع Alphanumeric هستند؟
پایتون دارای یک متد داخلی ()isalnum است که اگر همه کاراکترهای رشته از نوع Alphanumeric باشند، مقدار True را برمیگرداند.
>> "abcd123".isalnum()
Output: True
>>”abcd@123#”.isalnum()
Output: False
Another way is to use regex as shown.
>>import re
>>bool(re.match(‘[A-Za-z0-9]+$','abcd123’))
2. چگونه عناصر را در یک دنباله ادغام میکنید؟
سه نوع دنباله (Sequence) در پایتون وجود دارد:
- Lists
- Tuples
- Strings
نمونهای از List در پایتون:
>>l1=[1,2,3]
>>l2=[4,5,6]
>>l1+l2
خروجی: [1,2,3,4,5,6]
نمونهای از Tuple در پایتون:
>>t1=(1,2,3)
>>t2=(4,5,6)
>>t1+t2
خروجی: (1,2,3,4,5,6)
نمونهای از String در پایتون:
>>s1=“Simpli”
>>s2=“learn”
>>s1+s2
خروجی: ‘Simplilearn’
3. تفاوت بین Del و ()Remove در لیستها چیست؟
del | ()remove |
– تمام عناصر یک لیست را در یک محدوده مشخص حذف میکند؛- سینتکس: del list[start:end] | – اولین Occurrence یک کاراکتر خاص را حذف میکند- سینتکس: list.remove(element) |
نمونه کد زیر نحوه پیادهسازی این دو مفهوم را در پایتون نمایش میدهد:
>>lis=[‘a’, ‘b’, ‘c’, ‘d’]
>>del lis[1:3]
>>lis
Output: [“a”,”d”]
>>lis=[‘a’, ‘b’, ‘b’, ‘d’]
>>lis.remove(‘b’)
>>lis
خروجی: [‘a’, ‘b’, ‘d’]
توجه داشته باشید که در محدوده 1:3، عناصر تا 2 شمارش میشوند، نه 3.
4. خروجی کد زیر چیست؟ پاسخ خود را توجیه کنید.
>>def addToList(val, list=[]):
>> list.append(val)
>> return list
>>list1 = addToList(1)
>>list2 = addToList(123,[])
>>list3 = addToList('a’)
>>print ("list1 = %s" % list1)
>>print ("list2 = %s" % list2)
>>print ("list3 = %s" % list3)
خروجی این کد بهشکل زیر خواهد بود:
list1 = [1,’a’]
list2 = [123]
lilst3 = [1,’a’]
توجه داشته باشید که list1 و list3 با یکدیگر برابر هستند. وقتی اطلاعات را به addToList ارسال کردیم، این کار را بدون مقدار دوم انجام دادیم. اگر یک لیست خالی بهعنوان مقدار دوم نداشته باشیم، فرآیند با یک لیست خالی شروع بهکار میکند. در صورت نیاز، میتوانیم آیتمهای لیست را به آن اضافه کنیم. برای list2، مقدار را به یک لیست خالی اضافه کردیم، بنابراین مقدار آن [123] میشود.
برای list3، ما “a” را به لیست اضافه میکنیم. ازآنجاییکه ما لیست را تعیین نکردیم، این حرف یک مقدار مشترک است؛ یعنی لیست Reset نمیشود و مقدار آن را بهصورت [1، ‘a’] دریافت خواهیم کرد.
به یاد داشته باشید که لیستهای پیشفرض فقط یکبار در طول عملکرد برنامه ایجاد میشوند؛ نه در طول فراخوانی آن.
بیشتر بخوانید: فریلنسر کیست و فریلنسری چیست؟ – معرفی 12 سایت فریلنسری ایرانی و خارجی
5. Monkey Patching در پایتون چیست؟
Monkey Patching در پایتون یک تکنیک پویا است که میتواند رفتار کد را در زمان اجرا تغییر دهد؛ یعنی میتوانیم یک کلاس یا ماژول را در زمان اجرا تغییر دهیم.
مثال: کد زیر را ببینید:
class monkey:
def patch(self):
print ("patch() is being called")
def monk_p(self):
print ("monk_p() is being called")
# replacing address of "patch" with "monk_p"
monkey.patch = monk_p
obj() = monkey
obj().patch
# monk_p() is being called
در این مثال، ما یک کلاس “monkey” با تابع “()patch” ایجاد کردیم. همچنین یک تابع ‘monk_p’ در خارج از کلاس ساختیم.
سپس با اختصاص دادن «monkey.patch» به «monk_p»، «patch» را با تابع «monk_p» جایگزین کردیم.
در پایان، اصلاح را با ایجاد شی با استفاده از کلاس «monkey» و اجرای تابع «()patch» آزمایش کردیم.
پایتون بهجای نمایش “patch() is being calling”، “monk_p() is being calling را نمایش داده است.
6. دستور with در پایتون برای چه کاری طراحی شده است؟
دستور “with” در پایتون برای مدیریت استثنا استفاده میشود تا کد تمیزتر و سادهتر شود. بهطور کلی برای مدیریت منابع رایج مانند ایجاد، ویرایش و ذخیره یک فایل استفاده میشود.
بهطور مثال، میتوانیم بهجای نوشتن چند با دستورات open، try، finally و close، فقط از یک فایل متنی با استفاده از عبارت “with” استفاده کنیم و همان خروجی را دریافت کنیم.
# using with statement
with open('myfile.txt', 'w') as file:
file.write('DataCamp Black Friday Sale!!!')
7. با یک مثال توضیح دهید که چگونه از پایتون برای حذف فایلها استفاده میکنید.
سادهترین راه برای حذف فایلها در پایتون، استفاده از با تابع ()remove است که میتواند از ماژول os وارد شود. قبل از استفاده از این دستور، باید مسیر فایلی را که میخواهیم حذف کنیم را بدانیم.
همچنین برای صحتسنجی تابع و اطمینان از عملکرد درست آن، از یک بلوک try استفاده میکنیم. این بلوط اطمینان میدهد که در صورت بروز هرگونه استثنا و در مواجه با وجود نداشتن فایل، خطاهای مجوز یا دلایل دیگر، برنامه به کارکرد درست خود ادامه میدهد.
import os
# Specify the path of the file you want to delete
file_path = "path/to/your/file.txt"
try:
# Attempt to delete the file
os.remove(file_path)
print(f"{file_path} has been deleted successfully.")
except OSError as e:
print(f"Error deleting {file_path}: {e}")
5 نمونه سوال برنامه نویسی پایتون برای برنامه نویسان سنیور
در آخرین بخش از این مقاله، به بررسی پنج نمونه سوال برنامه نویسی پایتون برای سنیورها میرویم.
1. CPython چیست؟
پایتون یک زبان تفسیری است؛ یعنی کد آن ابتدا توسط یک برنامه دیگر (مفسر) تفسیر میشود و درنهایت به چیزی به نام بایتکد (Bytecode) کامپایل میشود.
بایتکد از بایتهایی ساخته شده است که دستورالعملهای سیستم را نشان میدهد. CPython پیادهسازی اصلی و مرجع پایتون است که با زبان برنامهنویسی C نوشته شده است.
بیشتر بخوانید: درآمد برنامه نویسی در ایران و جهان چهقدر است + 9 عامل تاثیرگذار بر درآمد برنامه نویسان
2. LEGB در پایتون چیست؟
LEGB مربوط به محدوده (Scoping) است. هنگامی که مفسر پایتون سعی در جستوجوی یک نام دارد، از قانون LEGB برای درک نامها (نام متغیرها، توابع و سایر اشیا) استفاده میکند. به این شکل که ابتدا وجود نامها را در دامنههای L، E، G و B به ترتیب زیر بررسی میکند:
- Local Scope: ناحیهای در بدنه تابع یا Lambda Expression؛
- Enclosing Scope: فرض کنید تابعی بهنام “outer” داریم که شامل یک تابع تودرتو میشود. محدوده محصور (یا محدوده غیرمحلی) ناحیهای در بدنه عملکرد outer است؛
- Global Scope: نامهای موجود در این محدوده برای همه کدهای یک اسکریپت پایتون (در یک فایل با پسوند py.) قابل مشاهده هستند؛
- Built-in Scope: نامهایی که در این محدوده وجود دارند، زمانی بارگذاری میشوند که یک shell/script پایتون را اجرا میکنیم. کلمات کلیدی مانند in، and، or، def، class و عباراتی مانند __main__، __file__ چند نمونه از این ساختارهای داخلی در پایتون هستند.
3. کاربرد کلمات کلیدی nonlocal و global در پایتون چیست؟
کاربرد این کلمات در سوال قبل آورده شده است و کد آن بهشکل زیر نوشته میشود:
variable = "hello 1" # This variable is declared in the Global scope
def fun():
global variable # Without this we would not be able to change the variable value
variable = "hello 2"
fun()
print(variable) # "hello 2"
………………………………………………………………..
def outer():
variable = "hello 1" # This variable is declared in a Local scope
def inner():
nonlocal variable # Without this keyword we could not change the variable value
variable = "hello 2"
inner()
print(variable)
outer() # "hello 2"
4. GIL چیست و چرا اهمیت دارد؟
GIL یکی از بحثبرانگیزترین و مهمترین ویژگیهای پیادهسازی پایتون براساس CPython است. GIL یا Global Interpreter Lock، یک سازنده (Construct) و ابزاری است که یک رشته را در هر زمان، فقط در یک برنامه پایتون اجرا میکند. به عبارتی دیگر، این قفل متعلق به مفسر پایتون است و از آن برای قفل کردن و جابهجا نکردن یک رشته بهره میبرد.
بهعنوان مثال، رشته T1 GIL را میگیرد و کار خود را انجام میدهد. درحالیکه مفسر پایتون از GIL برای قفل کردن T1 استفاده میکند، همه رشتههای دیگر باید منتظر پایان کار بمانند. پس از اتمام T1، GIL را آزاد میکند و آن را به رشته دیگری (T2) ارسال میکند که به آن نیاز دارد.
دلیل حضور GIL این است که CPython را ایمن میکند و اجازه نمیدهد برخی از رشتهها با یکدیگر تداخل داشته باشند.
5. در چه مواقعی باید از کتابخانههای Multithreading، Multiprocessing و Asyncio پایتون استفاده کنیم؟
ما عملیاتی را که میخواهیم کدهای پایتون برنامه انجام دهد را به دو دسته تقسیم میکنیم:
- عملیات محدود به CPU مانند parsing، پردازش تصویر، دستکاری رشتهها و الگوریتمهایی که محاسبات سنگین را انجام میدهند. برای این نوع عملیات میتوانیم از موازیسازی (Parallelism) استفاده کنیم. بهطور اصولی، برنامهنویسی موازی زمانی بهکار میرود که فرآیندهای مختلفی را برای تقسیم کار بین هرکدام میسازیم تا همه آنها، کارها را بهصورت همزمان انجام دهند. هر فرآیند دارای GIL، مفسر پایتون، فضای حافظه و اطلاعات وضعیت خود است. در پایتون، برای انجام این کار از کتابخانههای “Multiprocessing” استفاده میکنیم.
- عملیات محدود به IO شامل ارسال درخواستهای HTTP، نوشتن کوئریها و استخراج دادهها از دیتابیس، ارسال ایمیل و باز کردن یک فایل میشوند. ما از Concurrency برای این عملیات استفاده میکنیم. در پایتون، میتوانیم همین عملیات را با استفاده از کتابخانههای “Multithreading” و “Asyncio” انجام دهیم.
آنچه در 19 نمونه سوال برنامه نویسی پایتون خواندیم
نمونه سوال برنامه نویسی پایتون برای آن دست از برنامهنویسانی که مایلند استخدام شوند، کاربرد زیادی دارد؛ ازجمله آشنایی با مباحث مطرحشده در جلسات مصاحبه، آشنایی با ارائه پاسخهای کوتاه به سوالات، درک سوالاتی که بهنظر پیچیده میآیند و غیره. در این مقاله، ما 19 نمونه سوال پایتون را بررسی کردیم که برای برنامهنویسان در سه سطح مبتدی، متوسط و سنیور میتوانند کارآمد باشند.
سوالات متداولی که شما میپرسید
انواع کپیها در پایتون، مانند Shallow Copy و Deep Copy ازجمله پرتکرارترین نمونه سوال های برنامه نویسی پایتون است.
برای ارائه پاسخهای کوتاه و صحیح، باید درک درستی از مفاهیم برنامهنویسی و نحوه ارائه خروجی توسط مفسر پایتون داشته باشید. همچنین تسلط بر سینتکسنویسی بهینه و نوشتن کدهای تمیز، از دیگر رازهای موفقیت برنامهنویسان سنیور در جلسات مصاحبه است.
از اسفند 99 مشغول گشتوگذار در دنیای کلمات هستم؛ با این هدف که خوب بنویسم و این چشمانداز که کمکهای موثری کنم. بعداز گذشت سه سال و مطالعه زیاد در زمینههای گوناگون بازاریابی آنلاین ازجمله رفتارشناسی مخاطب آنلاین، حالا تلاش میکنم محتوایی بنویسم که شما بخونی، لُبکلام رو متوجه بشی، لذت ببری و با دست پر صفحه رو ترک کنی؛ شایدم بقیه نوشتههام رو بخونی :)