سلام من کد زیر را نوشتم :
'''حامد پین کد 5 رقمی گاو صندوق خود را فراموش کرده است .
با این حال ، درباره اعداد پین کد خود اطلاعات زیر را دارد :
جمع رقم های پنجم و سوم پین کد برابر 14 است .
رقم اول ، یک واحد از دو برابر رقم دوم کمتر است.
رقم چهارم ، یک واحد از رقم دوم بیشتر است.
جمع رقم های دوم و سوم برابر 10 است .
حاصل جمع رقم های پین کد برابر 30 است.
برنامه ای بنویسید که این رمز گاوصندوق را با استفاده از اطلاعات بالا پیدا کند .'''
'''note
RD=adad voroody
R =ramz -> tamam adad mojood
TR=this ramz -> string tamam adad
------------------------------------------'''
#جمع ارقام
def jam_Argham(RD):
sum_digits=0
for i in RD:
sum_digits += RD[i]
return sum_digits
#sharayet RAMZ
def ramz_is_ok(RD):
if RD["e5"]+RD["c3"]==14 and\
RD["a1"]==RD["b2"]*2 -1 and\
RD["d4"] ==RD["b2"]+1 and\
RD["b2"]+RD["c3"]==10 :#do noghte dar inja be mani in ast ke agar tamam shoroot ghabl az do noghte dorost bood sepas ...
if jam_Argham(RD) == 30:
return True
for R in range(0,100000):
TR=str(R).zfill(5)
#print(str(TR))
RD={}
RD["a1"]=int(TR[0])
RD["b2"]=int(TR[1])
RD["c3"]=int(TR[2])
RD["d4"]=int(TR[3])
RD["e5"]=int(TR[4])
if ramz_is_ok(RD):
print(R)
اما برام خروجی هیچ چیزی نمیده .
میشه بگید اشکالش چیه؟؟؟؟
@mehdi0121
@endworld
سلام من زیاد پایتون کار نکردم
ولی بیا برای ramz_is_ok یه false هم بذار
و بعدش برای if خط 37 یه else بذار
و چک کن اینارو یه پرینت هم از rd بگیر ببین داده هارو برمیگردنه
سلام رفیق ، امیدوارم حالت خوب باشه. دلیل خروجی نگرفتنت به این خاطر که کدی که نوشتی ورودی یکسانی رو به تابع is_ramz_ok(rd) میده و هیچ وقت مقدار True برنمیگردونه و تنها جایی هم که تو کدت میشه خروجی دید قسمتی از کده که هیچ وقت اجرا نمیشه چون همونطور که گفتم تابع ات همیشه مقدار ثابت میگیره که پین مورد نظر نیست و True برنمیگردونه. چند راه هست برای حل این مسئله (پیدا کردن پین) میتونیم از همین روش که کدت رو نوشتی استفاده کنیم که احتمالا قصد داشتی تمامی اعداد پنج رقمی رو جدا کنی و شرایط مسئله رو تست کنی. (ولی درست پیاده سازی نشده) من خودم با پایتون زیاد کار نکردم و فقط سعی کردم مسئله رو بفهمم و حل اش کنم به این روش. قطعا این روش تست همه اعداد روش بهینه ای نیست و راه بهتر احتمالا درست کردن پین نه تست کردن تمامی اعدا د ولی به قول معروف کار میکنه دیگه :) (اشتباه بزرگ)
'''حامد پین کد 5 رقمی گاو صندوق خود را فراموش کرده است .
با این حال ، درباره اعداد پین کد خود اطلاعات زیر را دارد :
جمع رقم های پنجم و سوم پین کد برابر 14 است .
رقم اول ، یک واحد از دو برابر رقم دوم کمتر است.
رقم چهارم ، یک واحد از رقم دوم بیشتر است.
جمع رقم های دوم و سوم برابر 10 است .
حاصل جمع رقم های پین کد برابر 30 است.
برنامه ای بنویسید که این رمز گاوصندوق را با استفاده از اطلاعات بالا پیدا کند .'''
'''note
RD=adad voroody
R =ramz -> tamam adad mojood
TR=this ramz -> string tamam adad
------------------------------------------'''
def jam_Argham(RD):
sum_digits=0
for i in RD:
sum_digits += RD[i]
return sum_digits
#sharayet RAMZ
def ramz_is_ok(RD):
if RD["digit5"]+RD["digit3"]==14 and\
RD["digit1"]==RD["digit2"]*2 -1 and\
RD["digit4"] ==RD["digit2"]+1 and\
RD["digit2"]+RD["digit3"]==10 :#do noghte dar inja be mani in ast ke agar tamam shoroot ghabl az do noghte dorost bood sepas ...
if jam_Argham(RD) == 30:
return True
for i in range (10000, 99999):
RD={}
possiblePin = i;
for i in range(0,5):
RD[f"digit{i+1}"] = int(str(possiblePin)[i]) # joda ****** argham va zakhire ****** to RD
if ramz_is_ok(RD):
pin = ""
for digit in RD:
pin += str(RD[digit])
print(f"pin hast: {pin}")
break
else:
print("ok nabood dobare !")
کد اپدیت شده شما بدون مشکل:
def jam_Argham(RD):
sum_digits=0
for i in RD:
sum_digits += RD[i]
return sum_digits
def ramz_is_ok(RD):
if RD["e5"]+RD["c3"]==14 and\
RD["a1"]==RD["b2"]*2 -1 and\
RD["d4"] ==RD["b2"]+1 and\
RD["b2"]+RD["c3"]==10 :
if jam_Argham(RD) == 30:
return True
for R in range(0,100000):
TR=str(R).zfill(5)
RD={
"a1": int(TR[0]),
"b2": int(TR[1]),
"c3": int(TR[2]),
"d4": int(TR[3]),
"e5": int(TR[4])
}
if ramz_is_ok(RD):
print(f'{RD["a1"]}{RD["b2"]}{RD["c3"]}{RD["d4"]}{RD["e5"]}')
ولی بهتون پیشنهاد میکنم از کد زیر استفاده کنید:
# ABCDE
# E + C = 14
# A = 2.B - 1
# D = B + 1
# B + C = 10
# A + B + C + D + E = 30
def key():
for B in range(1, 10):
for C in range(1, 10):
if B + C == 10:
D = B + 1
A = (2 * B) - 1
E = 14 - C
if A + B + C + D + E == 30:
num = f"{A}{B}{C}{D}{E}"
return num
return 'THE KEY DIDN\'T FIND.'
print(key())
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟