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

عمل جميل يا 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

أعتذر منك يا خالد على التأخر بالرد…

لا تقلق، الأمر عادي جدا كونها مفاهيم جديدة

نعم يوجد توضيحات لاحقة، وأيضا لو يوجد أي سؤال محدد ضعه هنا أو في موضوع منفصل في المنتدى (سؤال)، وسيتم إيضاح كل شيء :wink:

بإمكانك اختيار اي اسم اخر بدل self، مثلا x أو this

لكن احسب حساب أن المتغير الأول يشير إلى الـ object نفسه،

يعني لو تريد الدخول على قيمة الـ balance داخل الصراف الآلي نفسه تكتب self.balance… هذه هي فكرة الاوبجكت والكلاس أن كل اوبجكت تقدر تعدل بياناته لوحده

1 Like

شكرا لردك اخ ياسر،

يعني مثل this اللي في php والفرق أنه في هنا لازم نعرفها صح

1 Like

بالضبط، المهم هو معرفة البرمجة ككل… أما طريقة الكتابة (أو ما يعرف بـ syntax) لغات البرمجة يخلتف من لغة إلى أخرى :grin:

1 Like
def kd (bla, req):
    if bla ==0:
        print("مافي فلوس ")
    if req>bla:
         print("plz again no maony enough ")
    elif req <0 :
         print("are you kidning me ???")
    else:
        while req >0:
            if req >=100:
                req -=100
                print("give 100")
            elif req >=50:
                req -=50
                print("give 50")
            elif req >=10:
                req -=10
                print("give 10")
            elif req >=5:
                req -= 5
                print("give 5")
            elif req <5:
                print("give"+str(req))
                req =0
    return req-bla
bla = 500
kd(bla,300)
kd(bla,245)
kd(bla,50)
kd(bla,100)
1 Like

عمل جيد يا محمد :+1:

بالنسبة لتنسيق الأكواد أرجوا أن تطلع على الطريقة هنا:

أيضا جرب الكود:

bla = 500
kd(bla,300)
kd(bla,300)

المطلوب هو 600، لكن الرصيد 500… مع ذلك سيقوم بقبول العمليتين :smile:

ماهو الحل برأيك؟

1 Like

نخصم من الرصيد ميه في كل عملية صح؟
بحاول احلها ببايثون

1 Like