مشاركة حلول: مهمة سحب الأموال آلياً

مهمة سحب الأموال أليا

money = 500
papers=[100,50,10,5,2]
request = 277
while request > 0:
    for i in papers:
        if request  >= i:
            print('give' +' '+ str(i))
            request+=1
            request-=i
            if not request==0 :break
    request-=1

1 Like

عمل جيد يا احمد، لكن ماهي وظيفة الاسطر

request+=1
request-=1

هل فعلا نحتاجها؟

وايضا هل نحتاج لعمل if … break ؟

بخصوص reaquest+=1 لاضافه واحد الى ركويست على سبيل المثال فئه العمله 100 تطبع عندما تساوى الركويست ولاكن اذا طرحتها فأنها تطرح 99 وليست 100 لأنه اخر رقم لذالك يجب اضافه (+1 )قبل عمليه الطرح وهى reaquest-=i وليست reaquest - =1
i - = قيمه العمله الورقيه التى طرحت من ركويست

اما بخصوص if … break نحتاج لعملها حتى لاتنتقل الى الرقم او العمله الثانيه قبل انتهاء العمله الاكبر اولا ثم ينتفل الى العمله التى تليها
على سبيل المثال ادا لم نضع if … break وكانت request = 200 فأن الناتج سيكون بهذا الشكل

give 100
give 50
give 10
give 5
give 2
give 10
give 5
give 2
give 10
give 5
give 2
give 5
give 2

اما عند وضعها ستكون بهذا الشكل

give 100
give 100

اذا يوجد حلا افضل ارجو مشاركتها معى
اسف لعدم الشرح الجيد اذا لم افصلها جيد كتابتأ

شكرا

1 Like

نعم أتفهم مقصدك لكتابة الكود بهذا الشكل, لكن ما كنت أقصده أنه ممكن بدل أن تكتب:

if request  >= i:

تجعلها while لتقوم بتنقيص المبلغ كاملاً من هذه الفئة (لنقل فئة ورقة 100), حتى لا يستطيع أخذ المبلغ ينتقل على الفئة التالية

while request  >= i:

وبهذا لن نحتاج لـ break (لاحظ أن المشكلة الرئيسية أنك كنت تقوم بالتحكم بسير البرنامج يدوياً, لهذا غالباً break يكرهها أغلب المبرمجين لأنها تدل على أنه يمكن كتابة الكود بشكل أفضل).

وبعد التخلص من request+=1 و -=1 نحصل على:

money = 500
papers=[100, 50, 10, 5, 2]
request = 277
while request > 0:
    for i in papers:
        while request >= i:
            print('give' +' '+ str(i))
            request-=i

فهمت الان … شكرا للمساعده وحسن تعاونك :+1:

1 Like
# ATM function for withdrawing.
def withdraw():
    balance = 500
    request = input('Please, enter the required amount: ')
    request = int(request)      # To be used to validate inserted amount
    main_request = request      # To be used in output

    # Available banknotes 100, 50 & 20
    # To validate inserted amount that it matches available banknotes
    if request > balance or request <= 0:
        print('Please enter valid number')

    elif request < balance:
        while request >= 100:
            request -= 100
            # print(request)

        while request >= 50 and (request % 20 != 0):
            request -= 50
            # print(request)

        while request >= 20:
            request -= 20
            # print(request)

        if request != 0 and request % 20 != 0:
            print("enter valid number matzha'nesh !!")

        else:
            balance = balance - main_request
            print("The remaining balance is: ", balance)

            while main_request >= 100:
                print('give 100')
                main_request -= 100
                # print("rest is: ", main_request)

            while main_request >= 50 and (main_request % 20 != 0):
                print('give 50')
                main_request -= 50
                # print("rest is: ", main_request)

            while main_request >= 20:
                print('give 20')
                main_request -= 20
                # print("rest is: ", main_request)


withdraw()
1 Like
def atm_withdraw(request, balance):
    if request <= balance:
        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")
            else:
                print("give", request)
                request = request - request
    else:
        print("Not Enough Balance ", balance)


atm_withdraw(277, 500)



1 Like

ممتاز يا أحمد :+1:

بالنسبة للشرط:

if request < balance:

ماذا لو كان الـ request يساوي الـ balance ؟

من المفترض انه يستطيع السحب ايضا…قمت بتعديل الكود
شكرا لك

1 Like

مائة مائة :ok_hand:… انتقل للمهمة التالية

مهمة سحب الأموال اليا

# allowed papers: 100, 50, 10, 5, and rest of request
money = 500
request = 277

if request > money:
    print('money not enigh')
elif request <= 0:
    print('plz try again')
else:
    while request > 0:
        if request >= 100:
            request -= 100
            print('100$')
        if request >= 50 and request < 100:
            request -=50
            print('50$')
        if request >= 10 and request < 50:
            request -=10
            print('10$')
        if request >= 5 and request < 10:
            request -=5
            print('5$')
        if request < 5:
            print( str(request) + '$')
            request = 0
1 Like

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

لكن هل فعلاً نحتاج:

 and request < 100:

جرب حذفها (كذلك مع أي شرط فيه and) :wink:

1 Like

لم يعمل بشكل صحيح

1 Like

جرب استعمال elif بدل if… للانتقال على الشروط (واختيار واحد منها فقط) بدل المرور بها جميعا

1 Like

هذا هو الحل هل تفكيري منطقي :thinking:


def main():
    # allowed papers: 100, 50, 10, 5, and rest of request
    money = 500
    request = int(input("Enter request money: "))
    if request <0:
        print("hhh you Entered nigative number ^^")
        exit()
    while request > 0:
        if request >100:
            request-=100
            print("give 100")
        elif request <100 and request >50:
            request-=50
            print("give 50")
        elif request <50 and request >10:
            request-=10
            print("give 10")
        elif request <10 and request >5:
            request-=5
            print("give 5")
        else:
            print("give {}".format(request))
            break

main()
1 Like

طبقت المهمة مع بعض الاضافات البسيطة

def verifying(pin):
    #todo varivication PIN code.

    if pin == '1234':
        return True
    else:
        return False

def login():
    #todo a multiable login (4 as maximam)

    tries = 0
    while tries < 4:
        pin = input('Please Enter Your 4 Digit Pin: ')
        if verifying(pin):
            print(" Welcome ! ")
            return True
        else:
            print("Invalid pin")
            tries += 1
    print("Too many incorrect tries. couldn't login")
    return False

# allowed papers: 100, 50, 10, 5, and rest of request
def withdraw():
    #Todo function for allowed papers requests
    money = 500

    request = int(input('enter the withdraw..:'))

     while request > 0:
        if request >= 100:
            request -= 100
            print('export 100')
        elif  request >= 50:
            request -= 50
            print('export 50')
        elif  request >= 10:
            request -= 10
            print('export 10')
        elif  request >= 5:
            request -= 5
            print('export 5')
        elif request < 5:
            print('rest', request)
            request -= request


def main():
    print("Welcome to the atm!")
    if login():

        withdraw()
    print('done..')

main()



2 Likes

إضافات رائعة بالفعل يا يوسف :ok_hand:
صار البرنامج مثل جهاز ATM فعلي :smile:

بالنسبة للجزء هذا:

elif request <= 100 and request >= 50:

هل فعلاً نحتاج الشرط request <= 100 and ؟

نفس الأمر بالنسبة للشروط الأخرى…

زودت بس انه يقدر يعمل اكتر من عملية سحب + يقدر يدخل القيمة اللي عايز يسحبها :smile::heart:

Code:

moneyInAccount = 1000
withdrawTries = int(input("How many withdraw operation you want to perform? "))
while withdrawTries > 0:
    if moneyInAccount == 0:
        print("Sorry, you are out of money")
        break
    request = int(input("Please enter the amount of money you want to withdraw: "))
    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 don't have enough money! (Money in account:", moneyInAccount, ")")
1 Like
def withdraw(balance, request):

   while request <= balance and 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")
   print("Can't give you all this money !!")

balance = 500
request = input("money:")
request= int(request)
balance = withdraw(balance, request)

1 Like

صحيح . my Bad ^^

شكراً لك

1 Like