پیشنیاز و هدف یادگیری
این بخش، گام 14 از مسیر «پایتون از صفر» است. هدف این درس تبدیل رقم فارسی و عربی به انگلیسی بدون تغییر طول است. پیشنیاز: شکستن مسئله به تابعها؛ گزارش نمرات. کتابخانهٔ خارجی لازم نیست؛ ماژولهای استاندارد همراه Python 3 هستند. اگر مفهوم قبلی برایتان ناآشناست، ابتدا مقالهٔ پیشنیاز را بخوانید و مثالش را اجرا کنید؛ حفظکردن کد جای فهم ورودی و خروجی را نمیگیرد.
مفهوم اصلی به زبان ساده
ظاهر شبیه دو نویسه لزوماً به معنی یکسانبودن آنها نیست. رقم فارسی ۱، رقم عربی ١ و رقم انگلیسی 1 سه نویسهٔ متفاوتاند. وقتی یک سامانه شناسهای فقط با رقم انگلیسی میخواهد، باید تبدیل مشخصی تعریف کنیم. در این تمرین شناسهها کاملاً ساختگی هستند؛ از شماره و اطلاعات شخصی واقعی استفاده نکنید.
مسئلهٔ این درس
در پروژهٔ «پاکساز شناسهٔ عددی ساختگی» باید یک تابع مستقل بنویسید. میزکار ورودی نمونه را در request.json قرار میدهد؛ تابع solve دیکشنری داده را میگیرد و نتیجهٔ خود را برمیگرداند. در این قرارداد input لازم نیست و خواندن تعاملی از ترمینال ممکن است اجرای ارزیابی را متوقف کند. از مثال زیر شروع کنید و پیش از اجرای آن، شکل نتیجه را حدس بزنید.
نمونهکد قابل اجرا
def solve(data):
table = str.maketrans('۰۱۲۳۴۵۶۷۸۹٠١٢٣٤٥٦٧٨٩', '01234567890123456789')
value = data['value'].translate(table).replace(' ', '').replace('-', '')
if len(value) != 6 or any(c not in '0123456789' for c in value):
return {'error': 'invalid_id'}
return {'normalized': value}
print(solve({'value': '۰۰۱-۲۳۴'}))نتیجهٔ مورد انتظار
{
"normalized": "001234"
}توضیح مرحلهبهمرحله
با str.maketrans نگاشت ده رقم فارسی و ده رقم عربی به رقم انگلیسی میسازیم. translate این نگاشت را روی همهٔ متن اعمال میکند. فقط فاصله و خط تیره حذف میشوند؛ سایر نویسهها مجاز نیستند. نتیجه باید دقیقاً شش رقم انگلیسی باشد. خروجی رشته میماند تا صفرهای آغازین از بین نروند.
قرارداد ورودی و خروجی
مثال فقط یک ورودی است، نه همهٔ مسئله. مقدارها را از data بخوانید و جواب نمونه را ثابت در برنامه ننویسید. نام کلیدها، نوع عدد و رشته و ترتیب فهرستها بخشی از قراردادند. در پروژه، بخش پایانی main.py نتیجهٔ تابع را در result.json ذخیره میکند؛ آن بخش را نگه دارید. موفقیت اجرای برنامه با درستبودن پاسخ و قبولی ارزیابی یکسان نیست.
خطای رایج و راه تشخیص
تبدیل به int صفر ابتدای شناسه را حذف میکند. همچنین isdigit به تنهایی دامنهای بزرگتر از ۰ تا ۹ انگلیسی را قبول میکند؛ پس بعد از تبدیل، عضویت نویسهها در رشتهٔ 0123456789 را بررسی میکنیم. عادیسازی بیش از حد ممکن است دادهٔ نادرست را معتبر جلوه دهد.
تمرین مستقل و خودآزمایی
شناسهٔ ساختگی ۰۰۱-۲۳۴ را با نسخهٔ عربی همان رقمها مقایسه کنید. سپس یک حرف به وسط ورودی اضافه کنید و مطمئن شوید برنامه بهجای حذف حرف، خطا میدهد.
برای هر آزمایش، ورودی، خروجی مورد انتظار و خروجی واقعی را جدا بنویسید. اگر تفاوتی دیدید، یک نمونهٔ کوچکتر بسازید و تغییر را دوباره امتحان کنید. به جای اجرای چند تغییر همزمان، هر بار یک فرض را بررسی کنید. پس از فهم نمونه، پروژهٔ مرتبط را در میزکار حل کنید؛ ارزیابی با چند ورودی متفاوت انجام میشود و پاسخ ثابت نمونه پذیرفته نخواهد شد.
گام بعدی
موضوعهای این درس: Unicode · translate · maketrans. اگر میتوانید دلیل هر خط را توضیح دهید و ورودی تازهای را بدون دستکاری منطق اصلی حل کنید، به مقالهٔ بعدی بروید. هدف مسیر مقدماتی، تسلط بر همین رفتارهای کوچک و قابل آزمایش است؛ برای شروع پروژههای یادگیری ماشین عجله نکنید.
منابع و مطالعهٔ بیشتر
برای بررسی جزئیات و ادامهٔ مطالعه؛ متن این راهنما مستقلاً برای نوونتیکس نوشته شده است.
