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

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

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

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

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

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

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

  1. چالش شماره 1 پایتون: بررسی کنید که آیا فهرست مرتب شده است یا خیر
  2. چالش شماره 2 پایتون: اعداد باینری را به اعشار تبدیل کنید
  3. چالش شماره 3 پایتون: من را دوست دارد، من را دوست ندارد
  4. چالش شماره 4 پایتون: چالش توالی تربوناچی
  5. چالش شماره 5 پایتون: شماره کارت اعتباری را پنهان کنید
  6. چالش شماره 6 پایتون: اسفنجی
  7. چالش شماره 7 پایتون: رمزگذاری سزار
  8. چالش شماره 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
  • ورزش

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

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