مشاركة حلول: عمل أكثر من atm

أنا لم أفهم الخطأ أين

1 Like

الأمر وما فيه أن الدالة مكتوبة بهذا الشكل:

        else:
            while request > 0:

                if request >= 100:
                    request -= 100
                    print("give 100")

            ...

            result = self.balance - request

        return result

في هذه الحالة ستقوم بانقاص result بعد أن يصبح request قيمته صفر بسبب الـ loop التي بالأعلى :smile:

وهذا سيجعل قيمة result لا تتغير.

المفترض أن يكون بهذا الشكل:

        else:
            result = self.balance - request

            while request > 0:

                if request >= 100:
                    request -= 100
                    print("give 100")

            ...

        return result
1 Like

شكرا لك على تصحيح الخطأ :heart_eyes: :heart_eyes: :heart_eyes:

1 Like

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

ما شاء الله… عمل رائع يا أحمد :+1:

فقط بالنسبة لاسماء المتغيرات والدوال حاول أن تتبع pep8 الذي كتبه صانع لغة بايثون Guido van Rossum:
https://www.python.org/dev/peps/pep-0008/#naming-conventions

مثلاً بدل من printBankName، في بايثون تكتب print_bank_name وهكذا

1 Like

حاضر ،، تمام جدا :heart::heart:

1 Like
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()
2 Likes

جميل يا خير الدين، ملاحظ بسيطة لاحظ ان البرنامج لا يعرف balance_badr و balance_essalam لأنك لم تعرفهما.

1 Like

السلام عليكم، بعد غيابي الطويل، هذه مشاركتي المتواضعة :slightly_smiling_face: :

##########################################################
#                 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")

1 Like

عمل جيد يا ابراهيم… ولكن بدلاً من استعمال else متبوعة بـ if ما رأيك بجعلها كلها elif؟

1 Like

شكرا استاذي الكريم على الملاحظة. تم التعديل و الكود شغال :ok_hand::100:

1 Like
# 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()
2 Likes

عمل رائع يا أريج :+1:

2 Likes

شكرا أستاذ :blush:

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



2 Likes

عمل جميل يا محمود
ملاحظة بسيطة: لاحظ انك لم تحدد البنك الذي تريد سحب الاموال منه.

2 Likes

كيف لم احدد بنك

2 Likes

انت لديك حسابين في بنكين مختلفين البنك الاول و البنك الثاني و ستقوم بسحب الاموال منهما في كل مرة ستسحب من بنك فيجب عليك تحديد البنك الذي تريد سحب الاموال منه مثلا ستسحب 100 من البنك الاول و 200 من البنك الثاني الآن لو تنفذ البرنامج تكون النتيجة هكذا:

give 100
give 100
give 100

سحبنا الأموال لكن قلي 100 الاولى من أي بنك سحبت الاول أم الثاني؟
لكن لو تكون هكذا:

مرحبا بك في:  البنك الاول
give 100
مرحبا بك في:  البنك الثاني
give 100
give 100

أصبحت الأمور واضحة الآن، أليس كذلك؟

2 Likes

كيف اعمله ؟

2 Likes

يمكنك اضافة سطر طباعة اسم البنك print(self.bank_name)

1 Like