#python
#python
Вопрос:
Я пытаюсь создать банкомат, используя for
цикл, который будет печатать 100, 20, 10 и 1 секунды, но мой цикл for чрезмерно зацикливается и даст мне нужное количество изменений, но будет проходить через 100 секунд 20 раз.
import math
withdrawl = int(input("How much money do you want to withdraw?: "))
count = 0
for x in range(withdrawl):
if x >= 100:
print(math.trunc(withdrawl/100)," $100 Dollar Bills",)
withdrawl = withdrawl - (math.trunc(withdrawl/100)*100)
count = 1
else:
print("0 $100 Dollar Bills")
for x in range(x-1,withdrawl):
if x >= 20:
print(math.trunc(withdrawl/20)," $20 Dollar Bills")
withdrawl = withdrawl - (math.trunc(withdrawl/20)*20)
for x in range(withdrawl):
if x >= 10:
print(math.trunc(withdrawl/10)," $10 Dollar Bills")
withdrawl = withdrawl - (math.trunc(withdrawl/10)*10)
for x in range(withdrawl):
if x >= 5:
print(math.trunc(withdrawl/5)," $5 Dollar Bills")
withdrawl = withdrawl - (math.trunc(withdrawl/5)*5)
for x in range(withdrawl):
if x >= 1:
print(math.trunc(withdrawl/1)," $1 Dollar Bills")
withdrawl = withdrawl - (math.trunc(withdrawl/1)*1)
print ("Thank you for using our upgraded ATM machine!")
Комментарии:
1. Не могли бы вы, пожалуйста, переформатировать свой код? if и else не имеют правильного отступа
2.
for x in range(withdrawl):
создаст объект диапазона в начале, например, от 0 до 9999. Когда вы затем изменяете вывод в цикле, объект range не изменяется.3. По сути, вы ожидаете, что мы отладим вашу программу за вас… Пожалуйста, прочитайте о том, как отлаживать небольшие программы и использовать PythonTutor , чтобы помочь вам отслеживать выполнение вашей программы. В любом случае вы никогда не
break
выходите из циклов, поэтому они всегда будут выполнятьсяwithdrawl
количество раз…
Ответ №1:
Я думаю, что для вашей цели цикл for не является необходимым. Вы можете попробовать что-то вроде
n = 838
hundred, n = divmod(n, 100)
twenty, n = divmod(n, 20)
ten, n = divmod(n, 10)
five, n = divmod(n, 5)
one = n
print(hundred, twenty, ten, five, one)
>>> 8 1 1 1 3
Комментарии:
1. вы могли бы даже изучить
numpy.divmod()
, поскольку это возвращает оба//
и%
одновременно.
Ответ №2:
Следуя @Girish Dattatray Hegde
идее, вы можете иметь словарь и получать нужные вам суммы, перебирая ключи словаря, используя те же //
, %
операции, что и @Girish Dattatray Hegde
:
amount = 486.51
bill_dict = {
500: 0, 200: 0, 100:0,
50: 0, 20: 0, 10:0,
5: 0, 2: 0, 1:0,
0.50: 0, 0.20: 0, 0.10:0,
0.05: 0, 0.02: 0, 0.01:0,
}
for k in bill_dict.keys():
if amount / float(k) >= 1:
bill_dict[k] = int(amount // k)
amount = round(amount % k, 2)