متن خبر

چالش های کدنویسی پایتون برای توسعه دهندگان مبتدی – کد و توضیحات

چالش های کدنویسی پایتون برای توسعه دهندگان مبتدی – کد و توضیحات

شناسهٔ خبر: 502304 -




یادگیری پایتون می تواند چالش برانگیز باشد، به خصوص اگر در واقع کد کافی نمی نویسید. به عنوان یک مبتدی، ممکن است درس ها و آموزش ها را بدون تمرین به تنهایی پشت سر بگذارید – و این کار یادگیری زبان را سخت تر می کند.

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

هیچ دوره ای نمی تواند پیچیدگی های پایتون را به همان روشی که یافتن و حل خطاها انجام می دهد به شما آموزش دهد.

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

پس برای کمک به شروع بیشتر کدنویسی، در اینجا هشت چالش پایتون وجود دارد که می توانید به عنوان یک مبتدی امتحان کنید.

و در اینجا یک نکته وجود دارد : واقعاً سعی کنید پس از خواندن سؤال / درخواست، چالش را به تنهایی حل کنید. اگر گیر کردید، می توانید به کد زیر و توضیح آن نگاه کنید تا به شما در کشف آن کمک کند.

در اینجا چالش ها وجود دارد:

    چالش شماره 1 پایتون: تحلیل کنید که آیا فهرست مرتب شده است یا خیر

    چالش شماره 2 پایتون: اعداد باینری را به اعشار تبدیل کنید

    چالش شماره 3 پایتون: من را دوست دارد، من را دوست ندارد

    چالش شماره 4 پایتون: چالش توالی تربوناچی

    چالش شماره 5 پایتون: شماره کارت اعتباری را پنهان کنید

    چالش شماره 6 پایتون: اسفنجی

    چالش شماره 7 پایتون: رمزگذاری سزار

    چالش شماره 8 پایتون: آیا محصول بر مجموع بخش پذیر است؟

همه این چالش ها به شما در تقویت مهارت های حل مسئله و تفکر الگوریتمی کمک می کند. همچنین با نوشتن و تست کد برای اطمینان از صحت و کارایی، تجربه کسب خواهید کرد.

چالش شماره 1 پایتون: تحلیل کنید که آیا فهرست مرتب شده است یا خیر

چالش: تابعی بنویسید که تحلیل کند فهرست داده شده از اعداد به ترتیب صعودی یا نزولی مرتب شده است.

راه حل کد اینجاست:

 def is_sorted(lst): asc, desc = True, True for i in range(len(lst) - 1): if lst[i] > lst[i + 1]: asc = False for i in range(len(lst) - 1): if lst[i] < lst[i + 1]: desc = False return asc or desc

توضیح کد:

در کد بالا تابع is_sorted تعریف می کنیم که یک list به عنوان پارامتر می گیرد. ما دو بولی، asc (برای صعود) و desc (برای نزولی) را به True مقداردهی اولیه می کنیم.

سپس فهرست را تکرار می کنیم. اگر عنصر i فهرست از عنصر (i+1) بزرگتر باشد، پرچم asc روی False تنظیم می شود که نشان می دهد فهرست به ترتیب صعودی مرتب نشده است.

سپس دوباره فهرست را تکرار می کنیم. اگر عنصر i در فهرست کوچکتر از عنصر i+1 باشد، پرچم desc روی False تنظیم می شود که نشان می دهد فهرست به ترتیب نزولی مرتب نشده است.

اگر هر عنصری بزرگتر از عنصر بعدی باشد، پرچم asc روی False تنظیم می شود. در حلقه، تحلیل می کنیم که آیا عنصر i فهرست از عنصر i+1 بزرگتر است یا خیر.

 for i in range(len(lst) - 1): if lst[i] < lst[i + 1]: desc = False

اگر asc یا desc True باشد، True برمی‌گردانیم. این بدان معنی است که فهرست به ترتیب صعودی یا نزولی مرتب شده است.

چالش شماره 2 پایتون: اعداد باینری را به اعشار تبدیل کنید

چالش: تابعی بنویسید که یک عدد باینری را به معادل اعشاری آن تبدیل کند.

در اینجا راه حل کد آمده است:

 def binary_to_decimal(binary): decimal, i = 0, 0 while(binary != 0): dec = binary % 10 decimal = decimal + dec * pow(2, i) binary = binary//10 i += 1 return decimal

توضیح کد:

در کد بالا یک تابع binary_to_decimal تعریف می کنیم که یک عدد binary را به عنوان پارامتر می گیرد. سپس متغیرهای decimal و i به 0 مقداردهی اولیه کردیم.

متغیر decimal برای ذخیره مقدار اعشاری حاصل استفاده می شود و متغیر i نشان دهنده موقعیت فعلی در هنگام پردازش یک عدد باینری است که از 0 شروع می شود.

از طریق هر رقم باینری حلقه می زنیم تا همه ارقام عدد باینری 0 شوند.

 while binary != 0:

اکنون، با استفاده از عملگر مدول، کمترین رقم عدد باینری فعلی را استخراج می کنیم.

 dec = binary % 10

و سپس رقم استخراج شده را با ضرب آن در 2 توان افزایش یافته به i به معادل اعشاری آن تبدیل می کنیم.

 decimal = decimal + dec * pow(2, i)

سپس رقم پردازش شده را حذف می کنیم:

 Binary = binary // 10

و موقعیت i را افزایش دهید تا رقم باینری بعدی پردازش شود:

 i += 1

در نهایت مقدار اعشاری محاسبه شده را برمی گردانیم.

چالش شماره 3 پایتون: من را دوست دارد، من را دوست ندارد

چالش: با در نظر گرفتن یک عدد صحیح n، رشته ای را چاپ کنید که بین عبارات "Loves me" و "Loves me not" برای هر عدد از 1 تا n متناوب باشد.

سکانس باید با "مرا دوست دارد" شروع شود و بر این اساس متناوب شود.

در اینجا راه حل کد آمده است:

 def phrase_loves_me_not(n): phrases = [] for i in range(1,n+1): if i % 2 != 0: phrases.append("Loves me") else: phrases.append("Loves me not") return ", ".join(phrases)

توضیح کد:

ما یک تابع phrase_loves_me_not تعریف می کنیم که یک پارامتر n را می گیرد.

سپس، یک فهرست خالی، phrases را مقداردهی اولیه می کنیم، که نتیجه را برای هر عدد از 1 تا n ذخیره می کند.

ما از 1 تا n را تکرار می کنیم:

 for i in range(1, n+1):

سپس شاخص های فرد را تحلیل می کنیم. اگر عدد فرد باشد، "مرا دوست دارد" را به "عبارات" فهرست اضافه می کنیم.

 if i % 2 != 0: phrases.append("Loves me")

برای حتی شاخص‌ها، «مرا دوست ندارد» را در فهرست «عبارات» اضافه می‌کنیم.

 else: phrases.append("Loves me not")

سپس از متد join استفاده می کنیم تا تمام عناصر فهرست "عبارات" را به یک رشته واحد متصل کنیم و آن رشته را برگردانیم.

در نهایت رشته به دست آمده را برمی گردانیم.

 return ", ".join(phrases)

چالش شماره 4 پایتون: چالش توالی تربوناچی

چالش "دنباله تربوناچی" پیچشی بر دنباله معروف فیبوناچی است که در آن هر عدد مجموع سه عدد قبلی است.

به عنوان مثال، 0، 1، 1، 2، 4، 7 …

چالش: تابعی بنویسید که عدد n را در دنباله تربوناچی برگرداند.

در اینجا راه حل کد آمده است:

 def find_nth_tribonacci(n): # Base cases for n = 0, 1, 2 if n == 0: return 0 elif n == 1 or n == 2: return 1 # Initialize the first three terms of the Tribonacci sequence a, b, c = 0, 1, 1 for i in range(3, n + 1): next_term = a + b + c a, b, c = b, c, next_term return c

توضیح کد:

ابتدا تابعی به نام find_nth_tribonacci تعریف می کنیم که عدد n به عنوان پارامتر می گیرد.

سپس موارد پایه را به صورت زیر تعریف می کنیم:

اگر n 0 باشد، تابع 0 برمی گرداند.

اگر n 1 یا 2 باشد، تابع 1 را برمی گرداند.

توجه : این شرایط مقادیر شروع دنباله تربوناچی را کنترل می کند.

سپس سه مقدار اول دنباله تربوناچی را از n = 0 تا n = 2 مقداردهی اولیه می کنیم.

 a, b, c = 0, 1, 1

سپس از 3 به عدد n تكرار مي‌كنيم، جايي كه جمله بعدي را با جمع كردن سه جمله قبلي ( a ، b و c ) محاسبه مي‌كنيم. ما همچنین مقادیر a ، b و c را به مجموعه سه جمله بعدی در دنباله به روز می کنیم.

 for i in range(3, n + 1): next_term = a + b + c a, b, c = b, c, next_term

در انتهای حلقه، c مقدار عبارت n را در دنباله تربوناچی نگه می دارد، پس c برمی گردانیم.

 return c

چالش شماره 5 پایتون: شماره کارت اعتباری را پنهان کنید

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

راه حل کد اینجاست:

 def mask_credit_card(card_number): card=str(card_number) return "*"*(len(card) - 4) + (card[-4:])

توضیح کد:

ما یک تابع mask_credit_card تعریف می کنیم که card_number به عنوان پارامتر می گیرد.

ابتدا عدد را به رشته تبدیل می کنیم.

 card = str(card_number)

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

 "*"*(len(card) - 4)

سپس از عملیات slice برای بازیابی چهار رقم آخر شماره کارت اعتباری استفاده می کنیم.

 card[-4:]

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

 return "*"*(len(card) - 4) + card[-4:]

چالش شماره 6 پایتون: اسفنجی

SpongeCase سبکی از متن است که حروف به طور متناوب در حروف کوچک و بزرگ ظاهر می شوند. به عنوان مثال، کلمه در spongeCase sPoNgEcAsE خواهد بود.

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

در اینجا راه حل کد آمده است:

 def to_spongecase(text): result = [] i = 0 for char in text: if char.isalpha(): if i % 2 == 0: result.append(char.lower()) else: result.append(char.upper()) i += 1 else: result.append(char) return "".join(result)

توضیح کد:

ما یک تابع to_spongecase تعریف می کنیم که یک text رشته را به عنوان پارامتر می گیرد.

سپس یک نتیجه فهرست خالی را مقداردهی اولیه می کنیم و i با 0 شمارش می کنیم.

ما تابع را روی هر کاراکتر در رشته ورودی تکرار می کنیم و تحلیل می کنیم که آیا کاراکتر فعلی حروف الفبا است یا خیر.

 for char in text: if char.isalpha():

اگر نویسه در نمایه i (تنظیم شده برای کاراکترهای حروف الفبا) زوج باشد، نتیجه را با نویسه تبدیل به حروف کوچک اضافه می کنیم.

 if i % 2 == 0: result.append(char.lower())

اگر شاخص فرد باشد، نتیجه را با تبدیل کاراکتر به حروف بزرگ اضافه می کنیم.

 else: result.append(char.upper())

پس از پردازش یک کاراکتر الفبایی، شاخص i افزایش می یابد.

در مورد کاراکترهای غیر الفبایی، آنها را بدون تغییر حروف متناوب به فهرست نتایج همانطور که ظاهر می شوند اضافه کنید.

بعد از اینکه همه کاراکترها پردازش شدند، با استفاده از join دوباره آنها را در یک رشته ترکیب می کنیم.

 return "".join(result)

چالش شماره 7 پایتون: رمزگذاری سزار

رمزگذاری سزار (همچنین به عنوان رمز سزار نیز شناخته می‌شود) یک تکنیک رمزگذاری ساده است که با جابجایی حروف در پیام متنی با تعداد مشخصی موقعیت کار می‌کند.

چالش: یک تابع ایجاد کنید که دارای دو پارامتر باشد - یک رشته برای کدگذاری و یک عدد صحیح که تعداد موقعیت‌های هر حرف را نشان می‌دهد باید جابجا شود.

راه حل کد اینجاست:

 def caesar_encryption(text, shift): result = "" for char in text: if char.isalpha(): start = ord('A') if char.isupper() else ord('a') shifted = (ord(char) - start + shift) % 26 + start result += chr(shifted) else: result += char return result

توضیح کد:

ما یک تابع caesar_encryption تعریف می کنیم که دو پارامتر دارد: یک text رشته و یک shift عدد صحیح.

سپس یک رشته خالی را مقداردهی اولیه می کنیم تا کاراکترهای کدگذاری شده را جمع آوری کنیم.

 result = ""

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

برای کاراکترهای حروف الفبا، کاراکتر جدید را پس از اعمال شیفت محاسبه می کنیم.

سپس کاراکترهای غیر الفبایی مانند اعداد را بدون تغییر به نتیجه اضافه می کنیم.

 for char in text: if char.isalpha(): start = ord('A') if char.isupper() else ord('a') shifted = (ord(char) - start + shift) % 26 + start

پس چگونه شخصیت جدید را محاسبه کنیم؟

ما مقدار ASCII 'A' را برای حروف بزرگ یا 'a' برای حروف کوچک تعیین می کنیم.

ابتدا کاراکتر را به کد ASCII تبدیل کنید، با کم کردن شروع و اضافه کردن شیفت، آن را به محدوده 0-25 نرمال کنید و سپس با استفاده از مدول 26 آن را در اطراف بپیچید تا مطمئن شوید که در محدوده حروف الفبا باقی می ماند.

در نهایت، شروع را اضافه می کنیم تا آن را به محدوده ASCII صحیح نگاشت کنیم.

مقدار شیفت شده را با استفاده از chr() به یک کاراکتر تبدیل کنید و به نتیجه اضافه کنید.

 result += chr(shifted)

پس از پردازش همه کاراکترها، رشته کدگذاری شده را برگردانید.

 return result

چالش شماره 8 پایتون: آیا محصول بر مجموع بخش پذیر است؟

چالش: تابعی بسازید که فهرستی از اعداد صحیح را بگیرد و برمی‌گرداند که حاصل ضرب آن اعداد صحیح بر مجموع آنها بخش‌پذیر است یا خیر.

اگر حاصل ضرب تمام اعداد صحیح موجود در فهرست بر مجموع آنها و در غیر این صورت False باشد، تابع باید True برگرداند.

در اینجا راه حل کد آمده است:

 def is_product_divisible_by_sum(numbers): if not numbers: return False product = 1 summation = 0 for num in numbers: product *= num summation += num if summation == 0: return False return product % summation == 0

توضیح کد:

ابتدا تابع is_product_divisible_by_sum را تعریف می کنیم که فهرست ی از اعداد صحیح، numbers به عنوان پارامتر می گیرد.

سپس، تحلیل می کنیم که آیا numbers فهرست ورودی خالی هستند یا خیر. اگر خالی است، False را برگردانید.

 if not numbers: return False

در غیر این صورت، دو متغیر را مقداردهی اولیه کنید: product به 1 و summation به 0 .

 product = 1 summation = 0

روی هر عدد در فهرست تکرار کنید تا مجموع حاصلضرب و مجموع همه اعداد موجود در فهرست محاسبه شود.

 for num in numbers: product *= num summation += num

پس از محاسبه مجموع، تحلیل کنید که آیا مجموع آن صفر است یا خیر. تقسیم بر صفر در ریاضیات تعریف نشده است و باعث ایجاد خطا در برنامه نویسی می شود، پس False را برگردانید.

 if summation == 0: return False

در نهایت، با استفاده از عملگر مدول % تحلیل کنید که آیا حاصلضرب بر مجموع تقسیم می شود.

در اینجا، اگر باقیمانده صفر باشد، یعنی حاصلضرب کاملاً بر مجموع تقسیم می شود، True برگردانید. در غیر این صورت، False برگردانید.

 return product % summation == 0

بسته بندی

اینها تنها چند چالش هستند که می توانند به شما در ایجاد مهارت های حل مسئله کمک کنند. من به شما پیشنهاد می کنم این چالش ها را خودتان امتحان کنید.

اگر می‌خواهید چالش‌های بیشتری را حل کنید، می‌توانید پلتفرم‌های زیر را امتحان کنید:

لیت کد

چالش های انجمن PRO Programiz

ورزش

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

کد نویسی مبارک!

خبرکاو

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است