دانشجویان بیکار
سلیب و فرهاد و سعید برای تمرین ریاضی دانشگاهشان، بازی زیر را انجام میدهند.
سلیب یک معادله بهصورت a + b = c انتخاب میکند که در آن هر سه عدد، نامنفی هستند. سپس معادله را روی کاغذ مینویسد و آن را به فرهاد میدهد. فرهاد از بین a و b و c یک عدد را انتخاب کرده و بدون اینکه سعید ببیند، یک قسمت از آن را حذف میکند و با # جایگزین میکند.
حال نوبت سعید است که معادلهی اولیه را حدس بزند. از آنجایی که سلیب کمی بیسواد است، ممکن است از ابتدا معادله را اشتباه نوشته باشد. در این صورت سعید باید بگوید که معادله از ابتدا اشتباه بودهاست.
شما باید تابعی به نام solve را کامل کنید که معادلهای به شکل a + b = c را در قالب یک رشته بهعنوان ورودی دریافت میکند. دقیقاً یکی از اعداد این رشته مجهول بوده و حاوی # است.
- اگر به جای
#میتوانستید ارقامی را قرار دهید تا معادله کامل شود → معادلهی کامل شده را برگردانید- در غیر این صورت → رشتهی
'-1'را برگردانید
🎯 نمونه
نمونهی ۱
>>> solve("10# + 50 = 10052")
'10002 + 50 = 10052'
10052 − 50 = 10002 ← با 10# مطابقت دارد (به جای # ارقام 002 قرار میگیرد)
نمونهی ۲
>>> solve("15 + 1#2 = 136")
'-1'
136 − 15 = 121 ← با 1#2 مطابقت ندارد
💡 راهنمایی
مرحله ۱: شروع کار
در ابتدا باید = و + و فاصلههای اضافی را از عبارت ورودی حذف کنیم.
# حذف فاصلهها و جدا کردن اعداد
parts = equation.replace(" ", "").split("+")
a = parts[0]
b_and_c = parts[1].split("=")
b = b_and_c[0]
c = b_and_c[1]
مرحله ۲: پیدا کردن عدد مجهول
# میتواند در هریک از اعداد a، b یا c قرار گرفته باشد.
عدد مجهول (عددی که دارای # است) را پیدا کنید و آن را x بنامید. سپس با توجه به مقدار دو عدد دیگر، مقدار درست (y) را به دست آورید.
مرحله ۳: بررسی تطابق با RegEx
باید بررسی کنید که آیا میتوان به جای # ارقامی قرار داد به طوری که x برابر با y شود.
x را به یک الگوی RegEx مناسب تبدیل کنید:
#→\d*(هر تعداد رقم)- شروع رشته →
^ - پایان رشته →
$
🔧 مثال ساخت الگوی RegEx
فرض کنید معادلهی "3#7 + 23 = 330" در ورودی داده شدهاست.
- عدد مجهول:
3#7 - تبدیل به الگو:
^3\d*7$ - بررسی: آیا
307(جواب معادله) با^3\d*7$مطابقت دارد؟
import re
x = "3#7"
y = "307"
pattern = r'^' + x.replace("#", r'\d*') + r'$'
# pattern = r'^3\d*7$'
if re.match(pattern, y):
print("مطابقت دارد!")
⚠️ چالشهای حل تمرین
❌ چرا کد در سیستم خودم کار میکند اما در اینجا نمرهای نمیگیرد؟
- شما باید فقط تابع
solveرا تکمیل کنید.- ورودی از طریق آرگومان تابع و خروجی با
returnانجام میشود.- از
input()وprint()استفاده نکنید.- نیازی به فراخوانی تابع نیست.
حتماً
'-1'را بهصورت رشته برگردانید، نه عدد-1.
💡 راهحل نهایی
import re
def solve(equation):
# حذف فاصلهها و جدا کردن اعداد
parts = equation.replace(" ", "").split("+")
a = parts[0]
b_and_c = parts[1].split("=")
b = b_and_c[0]
c = b_and_c[1]
# پیدا کردن عدد مجهول و محاسبهی پاسخ
if '#' in a:
x = a
y = str(int(c) - int(b))
elif '#' in b:
x = b
y = str(int(c) - int(a))
else:
x = c
y = str(int(a) + int(b))
# ساخت الگوی RegEx از عدد مجهول
pattern = r'^' + x.replace("#", r'\d*') + r'$'
# بررسی تطابق
if re.match(pattern, y) and int(y) >= 0:
return equation.replace(x, y)
return '-1'
✅ این تمرین را در ویرایشگر خود پیادهسازی کنید. به یاد داشته باشید که فقط تابع
solveرا ارسال کنید.
نمونهها
solve("10# + 50 = 10052")'10002 + 50 = 10052'
solve("15 + 1#2 = 136")'-1'
برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.
ورود