def withdraw(balance , request):
if request > balance:
print("Sorry !! you can't have many ")
elif request < 0 :
print("oops !? Add another zero to complete the request")
else:
print("your pleance :" , str(balance))
balance = balance -request
while request > 0:
if request >=100 :
request -=100
print("100")
elif request >=50:
request -=50
print("50")
elif request >=10:
request -=10
print("10")
else:
request -=5
print("5")
return balance
balance =500
balance = withdraw(balance, 300)
balance = withdraw(balance, 200)
balance = withdraw(balance, 400)
balance = withdraw(balance, 150)
عمل جميل يا BassamMsmar
ملاحظة بسيطة: لو تحاول سحب مبلغ 177 النتيجة تكون هكذا:
100
50
10
10
5
5
يعني سيمنحك 180 لأنك لم تمنح فرصة سحب قيمة اقل من 5.
بالتوفيق
هلا ؛
قمت بعمل الحل باستخدام دالتين withdraw1 و withdraw
أحدههم تستخدم الـ array لتجنب تكرار جمل الشرط المستخدم في اختبار فئة العملة المنصرفة ؛
والاخرى مع جمل شرط متكررة حسب فئة العملة.
الكود :-
balance = 700
papers=[100, 50, 10, 5,4,3,2,1]
def withdraw(balance, request):
if balance < request :
print('Sorry, you are try withdraw: {0}, but Your balance just : {1}'.format(request, balance))
else:
print ('your balance >>', balance)
orgnal_request = request
while request > 0:
for i in papers:
while request >= i:
print('give', i)
request-=i
balance -= orgnal_request
return balance
def withdraw1(balance, request):
give = 0
if balance < request :
print('Sorry, you are try withdraw: {0}, but Your balance just : {1}'.format(request, balance))
else:
print ('your balance >>', balance)
balance -= request
while request > 0:
if request >= 100:
give = 100
elif request >= 50:
give = 50
elif request >= 10:
give = 10
elif request >= 5:
give = 5
else :
give = request
print('give',give)
request -= give
return balance
balance = withdraw(balance, 777)
balance = withdraw(balance, 276)
balance = withdraw1(balance, 276)
balance = withdraw(balance, 34)
balance = withdraw1(balance, 5)
balance = withdraw1(balance, 500)
ونتيجة تشغيل التطبيق هي :
Sorry, you are try withdraw: 777, but Your balance just : 700
your balance >> 700
give 100
give 100
give 50
give 10
give 10
give 5
give 1
your balance >> 424
give 100
give 100
give 50
give 10
give 10
give 5
give 1
your balance >> 148
give 10
give 10
give 10
give 4
your balance >> 114
give 5
Sorry, you are try withdraw: 500, but Your balance just : 109
…
balence=500
def sahb(balence,requaset):
if balence<requaset:
print(“we dont have this some”)
elif requaset<0:
print(“please check you code”)
else:
return balence-requaset
while requaset>0:
if requaset>=100:
requaset-=100
print(“give 100”)
elif requaset>=50:
requaset-=50
print(“give 50”)
elif requaset>=10:
requaset-=10
print(“give 10”)
elif requaset >=5:
requaset-=5
print(“give 5”)
elif requaset<5:
requaset=0
print(“give”+ str(requaset))
return balence
balence=sahb(balence,300)
balence=sahb(balence,200)
balence=sahb(balence,0)
…المحافظة على التنسيق
def withdraw(balance, request):
if request > balance:
print("Can't give you all this money !!")
elif request < 0:
print("More than zero plz!")
else:
while request > 0:
if request >= 100:
request -= 100
print("give 100")
elif request >= 50:
request -= 50
print("give 50")
elif request >= 10:
request -= 10
print("give 10")
elif request >= 5:
request -= 5
print("give 5")
elif request < 5:
print("give " + str(request))
request = 0
return balance
balance = 500
balance = withdraw(balance, 277)
balance = withdraw(balance, 30)
balance = withdraw(balance, 5)
balance = withdraw(balance, 500)
لماذا اذا وضعت balance = 500
في الاعلى يطلع Error
واذا وضعتها في الاسفل تعمل ؟!!
عمل جميل يا alaa_aimen
ملاحظة بسيطة:
return balence-requaset هذا السطر البرمجي يوقف تنفيذ البرنامج لأن دالة return معناه ارجاع نتيجة تنفيذ الكود و يكون عادة في آخر الدالة.
كما انك لم تضع احتمال القيمة اقل من 5 مثلا لو تسحب المبلغ 277 سيمنحك 275 و يبقى 2 لا تسحب.
من فضلك قم بتنسيق الكود في المهام القادمة و هذا باتباع الفيديو من الرابط التالي:
عمل جميل يا mee
ملاحظة بسيطة:
البرنامج يمنحك فقط 100 من 277 و هذا بسبب موقع العبارة return balance التي لم توضع في مكانها الصحيح كما انه يمنحك ايضا المبلغ 500 رغم انك سحبت منه 277 و 30 و هذا بسبب انك لم تنقص القيمة المسحوبة من الرصيد الاولي لديك في البنك.
def withdraw(balance, request):
# allowed papers: 100, 50, 10, 5, and cents
if request > balance:
print("Can't give you all this money !!")
elif request < 0:
print("More than zero plz!")
else:
balance = balance-request
while request > 0:
if request >= 100:
request -= 100
print("give 100")
elif request >= 50:
request -= 50
print("give 50")
elif request >= 10:
request -= 10
print("give 10")
elif request >= 5:
request -= 5
print("give 5")
elif request < 5:
print("give " + str(request))
request = 0
return balance
# Execution
balance = 500
print("fisrt call________________")
balance = withdraw(balance, 277)
print("second call________________")
balance = withdraw(balance, 30)
print("third call________________")
balance = withdraw(balance, 5)
print("fourth call________________")
balance = withdraw(balance, 500)
عمل جميل يا zeekzone
مـهـمـة تـجـنـب الـنـسـخ والـلـصـق …
def withdraw():
balance=500
request=input()
request=int(request)
if request<=balance:
print("Your balance amount is "+str(balance))
balance=balance-request
print("Your new balance amount is "+str(balance))
while request>0:
if request>=100:
print("give 100")
request-=100
elif request >=50:
print("give 50")
request-=50
elif request>=10:
print("give 10")
request-=10
elif request>=5:
print("give 5")
request-=5
else:
print("give "+str(request))
request-=request
else:
print("No enough money")
return balance
count=0
while count<=5:
withdraw()
count+=1
عمل رائع
ما رايك بجعل balance و request ك parameters للدالة
هـكـذا …
balance=500
def withdraw(balance,request):
if request<=balance:
print("Your balance amount is "+str(balance))
balance=balance-request
while request>0:
if request>=100:
print("give 100")
request-=100
elif request >=50:
print("give 50")
request-=50
elif request>=10:
print("give 10")
request-=10
elif request>=5:
print("give 5")
request-=5
else:
print("givea "+str(request))
request-=request
else:
print("No enough money")
return balance
balance=withdraw(balance,200)
balance=withdraw(balance,150)
balance=withdraw(balance,100)
balance=withdraw(balance,40)
balance=withdraw(balance,5)
لـيـش فـي الـكـود الأول مـا كـان يـنـقـص الـ balance بـهـذا الـطريـقـه !
100% يا فاتن
لان المتغير balance كان يتم اعادة تعريفه كل مرة داخل الدالة.
يـسـلـمـوا …
def give_money(x,y,z):
i = 0
if x <= y:
y -= x
while x != 0:
if x >= z[i]:
print('give ', z[i])
x -= z[i]
elif x < 5:
print('give ',x)
x = 0
else:
i += 1
return y
else:
print('there is no more money')
return y
balance = 500
peaper = [100,50,10,5]
print(balance)
balance = give_money(275,balance,peaper)
print(balance)
balance = give_money(150,balance,peaper)
print(balance)
balance = give_money(200,balance,peaper)
print(balance)
عمل رائع يا أنس
بما أن مستواك متقدم، ستكون الملاحظات دقيقة
- اسماء المتغيرات x, y, z يفضل أن تكون أوضح، لكي تصير الأكواد مقروءة أكثر… مثلاً:
def give_money(amount, balance, notes):
- المتغير y يتم ارجاعه في كلا الحالتين if else، لذا بإمكانك وضع return y في نهاية الدالة بدلا من كتابتها مرتين:
def give_money(x,y,z):
i = 0
if x <= y:
...
else:
...
return y
- بدلاً من استعمال الحلقة while مع انقاص المبلغ بشكل متواصل، تستطيع تحسين / تسريع الكود باستعمال divmod (قسمة وباقي القسمة)… حاول بنفسك، وتأكد من حلك بالأعلى يوجد من قام بها
شكراً على الملاحظات
في درس الإرجاع مرة واحدة في دالة
return balance - request
يوجد قبلها تعيين للمتغير request ل 0، الا يعني هذا أن balance لن تتغير قيمتها؟
بالفعل، كان الأجدر القيام بعملية الانقاص قبل الدخول في الحلقة while…
شكرا لك يا خالد بإطلاعنا حول المشكلة، تم اصلاحها
شكرا لكم على هذه المنصة الرائعة، عند وصولي دروس الكلاس والاوبجكت اصبحت اشعر بعدم الفهم واستيعاب كل شيء، حتى وإن حللت التمارين سيكون حفظ بدون فهم هل سيكون هناك توضيحات لاحقة عن ذلك لاحقاً، بخصوص ريتورن أو سيلف وما شابه، مثلا لماذا يجب أن يكون سيلف اول عنصر وهكذا