از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چالش های کدنویسی پایتون برای توسعه دهندگان مبتدی – کد و توضیحات
سرفصلهای مطلب
یادگیری پایتون می تواند چالش برانگیز باشد، به خصوص اگر در واقع کد کافی نمی نویسید. به عنوان یک مبتدی، ممکن است بدون تمرین درس ها و آموزش ها را طی کنید روی خودتان – و این کار یادگیری زبان را سختتر میکند.
حقیقت این است که شما نمی توانید برنامه نویسی را بدون نوشتن کد یاد بگیرید. از این طریق است process که چیزهای جدیدی یاد میگیرید و متوجه میشوید که چگونه اشتباهات کوچک، مانند از دست دادن یک نقل قول یا فاصله، میتواند ساعتها شما را ناامید کند.
هیچ دوره ای نمی تواند پیچیدگی های پایتون را به همان روشی که یافتن و حل خطاها انجام می دهد به شما آموزش دهد.
به همین دلیل است که اگر سفر برنامه نویسی خود را شروع می کنید، چالش های کدنویسی مهم هستند. آنها به شما کمک می کنند تا دانش خود را در عمل پیاده سازی کنید و اعتماد به نفس خود را افزایش دهید.
بنابراین برای کمک به شروع بیشتر کدنویسی، در اینجا هشت چالش پایتون وجود دارد که می توانید به عنوان یک مبتدی امتحان کنید.
و در اینجا یک نکته است: واقعا سعی کنید چالش را حل کنید روی خود را پس از خواندن از طریق سوال / درخواست. اگر گیر کردید، می توانید به کد زیر و توضیح آن نگاه کنید تا به شما در کشف آن کمک کند.
در اینجا چالش ها وجود دارد:
- چالش شماره 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
ما برمی گردیم True
اگر هر کدام asc
یا desc
است 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
به process رقم باینری بعدی:
i += 1
در نهایت مقدار اعشاری محاسبه شده را برمی گردانیم.
چالش شماره 3 پایتون: من را دوست دارد، من را دوست ندارد
چالش: با در نظر گرفتن یک عدد صحیح n، print رشته ای که برای هر عدد از 1 تا n بین عبارات “Loves me” و “Loves me not” متناوب است.
سکانس باید با “مرا دوست دارد” شروع شود و بر این اساس متناوب شود.
در اینجا راه حل کد آمده است:
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)
سپس از عملیات برش برای بازیابی چهار رقم آخر شماره کارت اعتباری استفاده می کنیم.
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 پایتون: آیا محصول بر مجموع تقسیم می شود؟
چالش: تابعی بسازید که فهرستی از اعداد صحیح را بگیرد و برمیگرداند که حاصل ضرب آن اعداد صحیح بر مجموع آنها بخشپذیر است یا خیر.
تابع باید برگردد True
اگر حاصل ضرب تمام اعداد صحیح لیست بر مجموع آنها و False
در غیر این صورت.
راه حل کد اینجاست:
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
- ورزش
آنها رایگان هستند و به شما کمک می کنند تا مهارت های منطقی خود را با دستان خود بسازید.روی تجربه.
کد نویسی مبارک!
منتشر شده در 1403-06-05 02:28:09