أنا لم أفهم الخطأ أين
الأمر وما فيه أن الدالة مكتوبة بهذا الشكل:
else:
while request > 0:
if request >= 100:
request -= 100
print("give 100")
...
result = self.balance - request
return result
في هذه الحالة ستقوم بانقاص result بعد أن يصبح request قيمته صفر بسبب الـ loop التي بالأعلى
وهذا سيجعل قيمة result لا تتغير.
المفترض أن يكون بهذا الشكل:
else:
result = self.balance - request
while request > 0:
if request >= 100:
request -= 100
print("give 100")
...
return result
شكرا لك على تصحيح الخطأ
Code:
class ATM:
def __init__(self, bank_name, balance):
self.balance = balance
self.bankName = bank_name
def printBankName(self):
print("Welcome to ==>", self.bankName, "<==")
def withdraw(self):
self.printBankName()
moneyInAccount = self.balance
withdrawTries = int(input("How many withdraw operation you want to perform? "))
while withdrawTries > 0:
request = int(input("Please enter the amount of money you want to withdraw: "))
if moneyInAccount == 0:
print("Sorry, you are out of money")
print("=================================================================")
break
while request <= 0:
request = int(input("[!] Please enter a reasonable amount: "))
if request <= moneyInAccount:
moneyInAccount = moneyInAccount - request
# Calculate Amount on 100
AmountOf100 = int(request / 100)
request %= 100
# Calculate Amount on 50
AmountOf50 = int(request / 50)
request %= 50
# Calculate Amount on 10
AmountOf10 = int(request / 10)
request %= 10
# Calculate Amount on 5
AmountOf5 = int(request / 5)
request %= 5
# Print Results
if AmountOf100:
print("get", AmountOf100, "* 100$")
if AmountOf50:
print("get", AmountOf50, "* 50$")
if AmountOf10:
print("get", AmountOf10, "* 10$")
if AmountOf5:
print("get", AmountOf5, "* 5$")
if request > 0:
print("get", request, "$")
withdrawTries -= 1
else:
print("Sorry, you are out of money! (Money in account:", moneyInAccount, ")")
self.balance = moneyInAccount
print("=================================================================")
atm1 = ATM("X Bank", 500)
atm2 = ATM("Y Bank", 1000)
atm1.withdraw()
atm2.withdraw()
ما شاء الله… عمل رائع يا أحمد
فقط بالنسبة لاسماء المتغيرات والدوال حاول أن تتبع pep8 الذي كتبه صانع لغة بايثون Guido van Rossum:
https://www.python.org/dev/peps/pep-0008/#naming-conventions
مثلاً بدل من printBankName، في بايثون تكتب print_bank_name وهكذا
حاضر ،، تمام جدا
class ATM:
def __int__(self,balance,name_bank):
self.balance=balance
self.name_bank=name_bank
def whithdraw(self,request):
if request < 0:
print("More than zero plz!")
elif request > self.balance:
print("can't give you all this money ! ! ")
else:
self.balance = self.balance - request
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
print("rest=", self.balance)
return self.balance
def bank(name_bank,balance_bank,request):
if name_bank=="elbadre":
balance_badr=balance_bank
request_badr=request
balance_badr = whithdraw(balance_badr, request_badr)
elif name_bank=="essalam":
balance_essalam=balance_bank
request_essalam=request
balance_essalam = whithdraw(balance_essalam, request_essalam)
return balance_bank
def app_princ():
balance_badr = 10000
balance_essalam = 5000
opera = "next"
choix = 1
while (opera == "next") and (choix == 1):
na_bank = input("Enter the bank name:")
print("hello to", na_bank)
request = int(input("request="))
if na_bank == "elbadre":
balance_badr = bank(na_bank, balance_badr, request)
balance_badr = balance_badr - request
elif na_bank == "essalam":
balance_essalam = bank(na_bank, balance_essalam, request)
balance_essalam = balance_essalam - request
choix = int(input("1:continuer,2:quitter"))
if choix == '2':
opera = quit
َATM.app_princ()
جميل يا خير الدين، ملاحظ بسيطة لاحظ ان البرنامج لا يعرف balance_badr و balance_essalam لأنك لم تعرفهما.
السلام عليكم، بعد غيابي الطويل، هذه مشاركتي المتواضعة :
##########################################################
# Simulation of multi_ATM in Python #
# allowed papers: 100, 50, 10, 5, and rest of request #
##########################################################
balance1 = 1000
balance2 = 3000
cont = True
class ATM:
def __init__(self, balance, bank_name):
self.balance = balance
self.bank_name = bank_name
def withdrawal(self):
print("\n\n\n")
request = int(input("Enter the amount you want to withdraw :"))
if (request > 0) and (request <= self.balance):
while request > 0:
if request >= 100:
print("give 100")
self.balance -= 100
request -= 100
else:
if request >= 50:
print("give 50")
self.balance -= 50
request -= 50
else:
if request >= 10:
self.balance -= 10
request -= 10
else:
if request >= 5:
print("give 5")
self.balance -= 5
request -= 5
else:
print("give " + str(request))
self.balance -= request
request -= request
self.balance -= request
# print ("your current balance is " + str(balance) )
else:
print('Sorry, we can\'t proceed with your request. \nThe amount number is incorrect or you don\'t '
'have enough balance for your request')
return self.balance
atm1 = ATM(balance1, "SMART BANK")
atm2 = ATM(balance2, "CHAABI BANK")
while cont:
print("\n\n")
print("***********************************************")
print("** WELCOME TO YOUR BANKS **")
print("***********************************************")
print("** DESIG.: " + atm1.bank_name + ". Current balance =" + str(atm1.balance) + " **")
print("***********************************************")
print("** DESIG.: " + atm2.bank_name + ". Current balance =" + str(atm2.balance) + " **")
print("***********************************************")
print("\n\n\n\n")
answer = int(input("Please select : 1=" + atm1.bank_name + " Withdrawal, 2=" + atm2.bank_name + " Withdrawal, 3=Exit "))
if answer == 1:
atm1.withdrawal()
if answer == 2:
atm2.withdrawal()
if answer == 3:
cont = False
print("Thank you for your visit")
عمل جيد يا ابراهيم… ولكن بدلاً من استعمال else متبوعة بـ if ما رأيك بجعلها كلها elif؟
شكرا استاذي الكريم على الملاحظة. تم التعديل و الكود شغال
# Class ATM
class ATM:
def __init__(self, bank_name, balance):
self.bank_name = bank_name
self.balance = balance
def withdraw(self,request):
if request > self.balance :
print('cant give you all this money!!')
elif request < 0 :
print('more then zero plz!!')
else:
self.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 ('give'+ str(request))
request = 0
print('rest=', self.balance )
return self.balance
# Use of Class ATM
def app_sys():
import sys
bank_Savings= ATM('savings', 700)
bank_Central= ATM('central', 1150)
while True :
option = input('1 * Savings | 2 * Central | 3 * Exit -> :')
request = int(input('request :'))
if option == '1' :
bank_savings.withdraw(request)
elif option == '2' :
bank_central.withdraw(request)
elif option == '3' :
sys.exit()
else:
print('[!] wrong option !')
app_sys()
عمل رائع يا أريج
شكرا أستاذ
class atm :
def __init__(self,balance,bank_name):
self.balance= balance
self.bank_name=bank_name
def withdraw (self,request):
result = self.balance
if request > self.balance:
print("Can't give you all this money !!")
elif request < 0:
print("More than zero plz!")
else:
result = self.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 result
balance1 = 500
balance2 = 1000
atm1 = atm(balance1,"smart bank")
atm2 = atm(balance2,"barka")
atm1.withdraw(100)
atm1.withdraw(10)
atm2.withdraw(300)
atm2.withdraw(200)
عمل جميل يا محمود
ملاحظة بسيطة: لاحظ انك لم تحدد البنك الذي تريد سحب الاموال منه.
كيف لم احدد بنك
انت لديك حسابين في بنكين مختلفين البنك الاول و البنك الثاني و ستقوم بسحب الاموال منهما في كل مرة ستسحب من بنك فيجب عليك تحديد البنك الذي تريد سحب الاموال منه مثلا ستسحب 100 من البنك الاول و 200 من البنك الثاني الآن لو تنفذ البرنامج تكون النتيجة هكذا:
give 100
give 100
give 100
سحبنا الأموال لكن قلي 100 الاولى من أي بنك سحبت الاول أم الثاني؟
لكن لو تكون هكذا:
مرحبا بك في: البنك الاول
give 100
مرحبا بك في: البنك الثاني
give 100
give 100
أصبحت الأمور واضحة الآن، أليس كذلك؟
كيف اعمله ؟
يمكنك اضافة سطر طباعة اسم البنك print(self.bank_name)