مشاركة حلول: تجنب النسخ واللصق باسخدام الدوال

في الواقع يا أمينة المشكلة ليست في while وإنما هي في هذا السطر:

return mony-request

لما؟

لأن هذا السطر يتم تنفيذه بغض النظر عن الشرط في الدالة بمعنى هو مثل:

def withdraw(mony , request):
    ...

    return mony-request

أي أنه لا يوجد أي شرط لإرجاع الناتج, سيتم دائماً تنفيذ هذا السطر بأي حال

ربما إذا اضفتي على السطر شرط بسيط مثل if mony <= request داخلها الحلقة ثم يرجع الفارق بينهم mony-request,
أما else يقوم بارجاع المبلغ كما هو return mony

انتظر تعديلاتك :wink:

balance = 500

def withdraw(balance, request):

    print(balance)
    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 


balance = withdraw(balance, 277)
balance = withdraw(balance, 30)
balance = withdraw(balance, 5)
balance = withdraw(balance, 500)


1 Like

تجنب النسخ واللصق

def withdraw(money,request):
    result = money
    if request > money:
        print('money not enigh')
    elif request <= 0:
        print('plz try again')
    else:
        result = money - 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$')
            elif request >= 5:
                request -=5
                print('5$')
            elif request < 5:
                print( str(request) + '$')
                request = 0
    return result
money = 1000

money = withdraw(money,250)
money = withdraw(money,250)
money = withdraw(money,150)
print(money)
1 Like

عمل ممتاز يا احمد… من الافضل ان تقوم بتعريف المتغير balance قبل تعريفه مباشرة بدلا من تعريفه في بداية البرنامج

1 Like

شغل مضبوط يا علي :+1:

def withdraw( balance, request ):
  print( "the value of balance is : ", balance)
  if  request > balance  :
      print( "sorry we do not  have enough money for your request" )
  elif request < 0 :
      print( "more than o, please")
  elif request < balance :
      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

  else :
      print( "we can not provide this service" )

  return balance - request
balance = 500

balance = withdraw( balance, 275 )
balance = withdraw( balance, 30 )
balance = withdraw( balance, 5 )
balance = withdraw( balance, 500 )
balance = withdraw( balance, -1 )
1 Like

عمل رائع يا منى :+1:

لكن هل جربتي ملاحظة قيمة المتغير balance في حال تشغيل السطر:

balance = withdraw( balance, 700)

جربي السطر وأخبريني بالنتيجة

هذا ا تم طباعته قبل التنقيح

the value of balance is :  500
sorry we do not  have enough money for your request
-200

لكن بعد تنقيح البرمجيات بهذه الطريقة

def withdraw( balance, request ):
  result = balance
  print( "the value of balance is : ", balance)
  if  request > balance  :
      print( "sorry we do not  have enough money for your request" )
  elif request < 0 :
      print( "more than o, please")
  elif request < balance :
      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
      result = balance - request

  else :
      print( "we can not provide this service" )

  return result
balance = 500

balance = withdraw( balance, 700 )

print (balance)

كانت النتيجة كالتالي

the value of balance is :  500
sorry we do not  have enough money for your request
500

وفي حالة الطلب اقل من الرصيد ونقل تعريف الناتج الى ما قبل الحلقة كانت الطباعة كالتالي

the value of balance is :  500
give 100
400
1 Like

مضبوط جداً… هذا هو المطلوب بالضبط :ok_hand:

انتقلي على المهمة التالية

1 Like

This is my trying:

def withdraw(balance, request):
    r = request
    if   request > balance:
        print("Can't give you all this money !!")
        return balance
    elif request < 0:
        print("More than zero plz!")
        return balance
    else:
        newBalance = balance-request
        print("[*] Request for {}$".format(r))
        while request > 0:
            if request >100:
                # remainder = request%100
                request-=100
                print("give 100")
            elif request <100 and request >50:
                request-=50
                print("give 50")
            elif request <50 and request >10:
                request-=10
                print("give 10")
            elif request <10 and request >5:
                request-=5
                print("give 5")
            else:
                print("give {}".format(request))
                print("[*] Request for {}$ Done".format(r))
                print("")
                break
    return newBalance

balance = 500
balance = withdraw(balance, 277)
balance = withdraw(balance, 30)
balance = withdraw(balance, 5)
balance = withdraw(balance, 500)

and the result was like this

[*] Request for 277$
give 100
give 100
give 50
give 10
give 10
give 5
give 2
[*] Request for 277$ Done

[*] Request for 30$
give 10
give 10
give 10
[*] Request for 30$ Done

[*] Request for 5$
give 5
[*] Request for 5$ Done

Can't give you all this money !!
1 Like

عمل ممتاز كالعادة يا كمال :wink:

هل نحتاج الجزء request <100 في الشرط:

elif request <100 and request >50:

نفس الأمر مع بقية الشروط الذي تبدأ بـ elif

1 Like

اها لقد فهمت قصدك استاذ ياسر ^^
شكرا لتنبيهي
تم التصحيح ^^

def withdraw(balance, request):
    r = request
    if   request > balance:
        print("Can't give you all this money !!")
        return balance
    elif request < 0:
        print("More than zero plz!")
        return balance
    else:
        newBalance = balance-request
        print("[*] Request for {}$".format(r))
        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")
            else:
                print("give {}".format(request))
                print("[*] Request for {}$ Done".format(r))
                print("")
                break
    return newBalance

balance = 500
balance = withdraw(balance, 277)
balance = withdraw(balance, 30)
balance = withdraw(balance, 5)
balance = withdraw(balance, 500)

1 Like

صار الان ممتاز :clap:

1 Like

توجد لدي مشكلة عندما ادخل الطلب في الثلاث مرات لا ينقص من الرصيد مع انو طرحت الطلب من الرصيد في ارجاع الدالة

def withdraw(balance, request):
    if request < balance:
        while request>0:
            if request>=100:
                request = request- 100
                print("give 100")

            elif request >= 50:
                request = request- 50
                print("give 50")

            elif request >= 10:
                request = request-10
                print("give 10")
            elif request >=5:
                request = request- 5
                print("give 5")

            elif request >=2 :
                request = request-2
                print("give 2")

            else:
                print("no found ")
    return balance - request

balance = 500
request= input("your request:")
request=int(request)
balance = withdraw(balance, request)
request= input("your request:")
request=int(request)
balance = withdraw(balance, request)
request= input("your request:")
request=int(request)
balance = withdraw(balance, request)
1 Like
balance = 500
def withdraw(balance, request):
    print('balance =',balance)
    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 -= request
    return balance

balance = withdraw(balance, 277)
balance = withdraw(balance, 30)
balance = withdraw(balance, 5)
balance = withdraw(balance, 500)
2 Likes

2 Likes

عمل جميل جدا.

2 Likes

عمل رائع يا خير الدين، لكن ماذا لو تضع الكود احسن من الصورة حتى يتسنى لنا فحص الكود جيدا و تجريبه.

1 Like

def whithdraw(balance,request):

if request > balance:
   print("can't give you all this money ! ! ")
else:
    while request >0:
        if request >= 100:
           request=request-100
           print("give 100")

        elif request >=50:
           request = request - 50
           print("give 50")

        elif request >=10:
           request = request - 10
           print("give 10")

        elif request>=5:
           request = request - 5
           print("give 5")
        elif request <5:
           print("give " + str(request))
           request=0

2 Likes

الصراف الالي

from test1 import whithdraw
balance= 500
opera=“next”
choix=1
while (opera==“next”) and (choix==1):
request=int(input(‘entrer request:’))
if balance-request<0:
print(“operation invalide”)
opera=“quit”
else:
whithdraw(balance,request)
balance=balance-request
print(“request:”,request)
print (“rest:”,balance,end=’\n’)
choix=int(input(“taper 1 pour contuner ,taper 2 pour quitter:”))
if choix==‘2’:
opera=quit

2 Likes