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

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)
2 Likes

عمل جميل يا BassamMsmar
ملاحظة بسيطة: لو تحاول سحب مبلغ 177 النتيجة تكون هكذا:

100
50
10
10
5
5

يعني سيمنحك 180 لأنك لم تمنح فرصة سحب قيمة اقل من 5.
بالتوفيق

1 Like

هلا ؛
قمت بعمل الحل باستخدام دالتين withdraw1 و withdraw :upside_down_face:
أحدههم تستخدم الـ 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)

ونتيجة تشغيل التطبيق هي :blush: :

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
1 Like


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)
المحافظة على التنسيق

2 Likes
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
واذا وضعتها في الاسفل تعمل ؟!!

2 Likes

عمل جميل يا alaa_aimen
ملاحظة بسيطة:
return balence-requaset هذا السطر البرمجي يوقف تنفيذ البرنامج لأن دالة return معناه ارجاع نتيجة تنفيذ الكود و يكون عادة في آخر الدالة.
كما انك لم تضع احتمال القيمة اقل من 5 مثلا لو تسحب المبلغ 277 سيمنحك 275 و يبقى 2 لا تسحب.
من فضلك قم بتنسيق الكود في المهام القادمة و هذا باتباع الفيديو من الرابط التالي:

1 Like

عمل جميل يا mee
ملاحظة بسيطة:
البرنامج يمنحك فقط 100 من 277 و هذا بسبب موقع العبارة return balance التي لم توضع في مكانها الصحيح كما انه يمنحك ايضا المبلغ 500 رغم انك سحبت منه 277 و 30 و هذا بسبب انك لم تنقص القيمة المسحوبة من الرصيد الاولي لديك في البنك.

2 Likes

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)

2 Likes

عمل جميل يا zeekzone

2 Likes

مـهـمـة تـجـنـب الـنـسـخ والـلـصـق …

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




1 Like

عمل رائع :+1:

ما رايك بجعل balance و request ك parameters للدالة

1 Like

هـكـذا …

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 بـهـذا الـطريـقـه !

1 Like

100% يا فاتن :+1:

لان المتغير balance كان يتم اعادة تعريفه كل مرة داخل الدالة.

1 Like

يـسـلـمـوا …

1 Like
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)


1 Like

عمل رائع يا أنس :+1:

بما أن مستواك متقدم، ستكون الملاحظات دقيقة :grin:

  • اسماء المتغيرات 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 (قسمة وباقي القسمة)… حاول بنفسك، وتأكد من حلك بالأعلى يوجد من قام بها :wink:
1 Like

شكراً على الملاحظات :rose:

1 Like

في درس الإرجاع مرة واحدة في دالة

return balance - request		

يوجد قبلها تعيين للمتغير request ل 0، الا يعني هذا أن balance لن تتغير قيمتها؟

1 Like

بالفعل، كان الأجدر القيام بعملية الانقاص قبل الدخول في الحلقة while…

شكرا لك يا خالد بإطلاعنا حول المشكلة، تم اصلاحها :ok_hand:

1 Like

شكرا لكم على هذه المنصة الرائعة، عند وصولي دروس الكلاس والاوبجكت اصبحت اشعر بعدم الفهم واستيعاب كل شيء، حتى وإن حللت التمارين سيكون حفظ بدون فهم هل سيكون هناك توضيحات لاحقة عن ذلك لاحقاً، بخصوص ريتورن أو سيلف وما شابه، مثلا لماذا يجب أن يكون سيلف اول عنصر وهكذا

1 Like