У меня есть задание для подсчета банкнот в 1000, 500, 100, 50, 20 и 10, я много чего перепробовал для цикла и, если условие не смогло получить правильный вывод. Пожалуйста, укажите мне правильный код и объяснение. Я хочу вывод аналогично вводу = введите сумму: 1070 выводов = в данной сумме имеется нота «1» 1000, нота «0» 500, нота «100», нота «1» 50, нота «1» 20, нота «0» 10. просто вывод должен быть 1 нота 1000,1 нота 50,1 нота 20.

    while True:
                while True:
                            try:
                                amount = int(input('\nEnter First number:'))
                            except ValueError:
                                print("\nPlease enter only number")
                            else:
                                break
                if (amount>=1000):
                    n_1000=amount/1000
                if (amount>=500):
                    n_500=amount/500
                if (amount>=100):
                    n_100=amount/100
                if (amount>=50):
                    n_50=amount/50
                if (amount>=20):
                    n_20=amount/20
                if (amount>=10):
                    n_10=amount/10
                print("\nThere are {0} 1000 notes,{1} 500 notes,{2} 100 
               notes,{3} 50 notes,{4} 20 notes,{5} 10 notes in given 
               amount.".format(n_1000,n_500,n_100,n_50,n_20,n_10))
                while True:
                            Repeat=input("\nDo you want to repeat?\n\nYes or No:")
                            Repeat=Repeat.lower()
                            if Repeat not in ["yes","y","no","n"]:
                                print("\nPlease select correct option")
                            else:
                                break


                if Repeat in ["yes","y"]:
                    continue
                else:
                    if Repeat in ["no","n"]:
                        print("\n-----Thank you for using-----")
                        input()
                        break
-3
waseem12312 29 Июн 2019 в 15:30

3 ответа

Лучший ответ

Правильный код такой: нет необходимости в условии или цикле.

    while True:
                while True:
                            try:
                                amount = int(input('\nEnter First number:'))
                            except ValueError:
                                print("\nPlease enter only number")
                            else:
                                break
                n_1000=amount//1000
                amount=amount-(n_1000*1000)
                n_500=amount//500
                amount=amount-(n_500*500)
                n_100=amount//100
                amount=amount-(n_100*100)
                n_50=amount//50
                amount=amount-(n_50*50)
                n_20=amount//20
                amount=amount-(n_20*20)
                n_10=amount//10
                amount=amount-(n_10*10)
                l_amount=amount
                print("\nThere are {0} 1000 notes,{1} 500 notes,{2} 100 notes,{3} 50 notes,{4} 20 notes,{5} 10 notes and {6} is left in given amount.".format(n_1000,n_500,n_100,n_50,n_20,n_10,l_amount))
                while True:
                            Repeat=input("\nDo you want to repeat?\n\nYes or No:")
                            Repeat=Repeat.lower()
                            if Repeat not in ["yes","y","no","n"]:
                                print("\nPlease select correct option")
                            else:
                                break


                if Repeat in ["yes","y"]:
                    continue
                else:
                    if Repeat in ["no","n"]:
                        print("\n-----Thank you for using-----")
                        input()
                        break

        if Repeat in ["yes","y"]:
            continue
        else:
            if Repeat in ["no","n"]:
                print("\n-----Thank you for using-----")
                input()
                break
0
Waseem Munir 29 Июн 2019 в 14:30

Я думаю, что это будет лучшим решением для вашей задачи:

END_COMMAND = 'quit'

def func():
    while True:
        while True:
            amount = input('Enter an integer amount (or type "{}"):'.format(END_COMMAND))\
                .lower().strip()
            if amount == END_COMMAND:
                print('Received "{}" instruction'.format(END_COMMAND))
                return

            try:
                amount = int(amount)
                break
            except ValueError:
                print('Error: "{}" is not a valid integer'.format(amount))

        print('Composition for amount "{:,d}":'.format(amount))
        for denomination in [1000, 500, 100, 50, 20, 10, 1]:
            n, amount = divmod(amount, denomination)

            if n > 0:
                print('   {:6,d} of denomination {:6,d}'.format(n, denomination))


if __name__ == '__main__':
    func()
0
Ralf 29 Июн 2019 в 13:05

Я запустил ваш код, в Python деление целых чисел может создать число с плавающей запятой, поэтому вам нужно использовать оператор // (который возвращает int). Вы также можете изменить сумму, чтобы не возвращать одно и то же изменение для каждой заметки, то есть для 1000, ваш текущий код будет возвращать «есть 1 1000 заметок, 2 500 заметок» и т. Д., Вы можете изменить каждую инструкцию if на

if (amount >= 1000):
    n_1000 = amount // 1000
    amount %= 1000

И было бы намного проще, если бы вы вели список заметок и перебирали его

0
rotem tal 29 Июн 2019 в 14:20