عمل جميل يا 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…
شكرا لك يا خالد بإطلاعنا حول المشكلة، تم اصلاحها
شكرا لكم على هذه المنصة الرائعة، عند وصولي دروس الكلاس والاوبجكت اصبحت اشعر بعدم الفهم واستيعاب كل شيء، حتى وإن حللت التمارين سيكون حفظ بدون فهم هل سيكون هناك توضيحات لاحقة عن ذلك لاحقاً، بخصوص ريتورن أو سيلف وما شابه، مثلا لماذا يجب أن يكون سيلف اول عنصر وهكذا
أعتذر منك يا خالد على التأخر بالرد…
لا تقلق، الأمر عادي جدا كونها مفاهيم جديدة
نعم يوجد توضيحات لاحقة، وأيضا لو يوجد أي سؤال محدد ضعه هنا أو في موضوع منفصل في المنتدى (سؤال)، وسيتم إيضاح كل شيء
بإمكانك اختيار اي اسم اخر بدل self، مثلا x أو this
لكن احسب حساب أن المتغير الأول يشير إلى الـ object نفسه،
يعني لو تريد الدخول على قيمة الـ balance داخل الصراف الآلي نفسه تكتب self.balance… هذه هي فكرة الاوبجكت والكلاس أن كل اوبجكت تقدر تعدل بياناته لوحده
شكرا لردك اخ ياسر،
يعني مثل this اللي في php والفرق أنه في هنا لازم نعرفها صح
بالضبط، المهم هو معرفة البرمجة ككل… أما طريقة الكتابة (أو ما يعرف بـ syntax) لغات البرمجة يخلتف من لغة إلى أخرى
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)
عمل جيد يا محمد
بالنسبة لتنسيق الأكواد أرجوا أن تطلع على الطريقة هنا:
أيضا جرب الكود:
bla = 500
kd(bla,300)
kd(bla,300)
المطلوب هو 600، لكن الرصيد 500… مع ذلك سيقوم بقبول العمليتين
ماهو الحل برأيك؟
نخصم من الرصيد ميه في كل عملية صح؟
بحاول احلها ببايثون