Python ATM 程序未按预期运行
Python ATM program not working as intended
我正在尝试在 Python 中制作类似 ATM 的程序。这个想法是用户输入任意数量的钱,并且将打印最小数量的账单(100, 50, 25, 10, 5)。
例如:
输入: 258
预期输出:“2 张 100 美元的钞票,1 张 50 美元的钞票,1 张 5 美元的钞票,3 张 1 美元的钞票”。
该程序适用于 5 的倍数的数字,但我似乎无法让 10 美元和 1 美元的钞票表现相同。这是代码:
print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
amnt = int(input("Please input amount: "))
if amnt >= 100:
if amnt // 100 >= 2:
print(amnt // 100, "0 Bills")
else:
print("1 0 Bill")
if (amnt // 50) % 2 != 0:
print("1 Bill")
if (amnt // 25) % 2 != 0:
print("1 Bill")
if (amnt // 10) % 2 != 0:
print(amnt // 10, " Bills")
if (amnt // 5) % 2 != 0 and (amnt // 25) % 2 == 0:
print("1 Bill")
if (amnt // 1) % 2 != 1:
print((amnt // 1), " Bills")
我正在使用 (//) 运算符,因为它会告诉您右边的数字中有多少是左边的数字。然后将 (%) 运算符与 (!= 0) 一起使用。这似乎适用于 100、50、25,但不适用于 10 和 1。我该如何解决这个问题?
我只是添加了一个 elif 来检查他们是否输入了 1,它似乎符合我的要求。
print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
amnt = int(input("Please input amount: "))
if amnt >= 100:
if amnt // 100 >= 2:
print(amnt // 100, "0 Bills")
else:
print("1 0 Bill")
if (amnt // 50) % 2 != 0:
print("1 Bill")
if (amnt // 25) % 2 != 0:
print("1 Bill")
if (amnt // 10) % 2 != 0:
print(amnt // 10, " Bills")
if (amnt // 5) % 2 != 0 and (amnt // 25) % 2 == 0:
print("1 Bill")
if (amnt // 1) % 2 != 1:
print((amnt // 1), " Bills")
elif amnt == 1:
print((amnt // 1), " Bills")
一个更简洁的解决方案是使用一个函数来为您执行此操作,以防万一您决定更改硬币价值。
print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
amnt = int(input("Please input amount: "))
def solve(m):
bills = [100, 50, 25, 10, 5, 1]
dic = {}
for bill in bills:
if m >= bill:
dic[bill] = m // bill
m -= dic[bill] * bill
return dic
def disp(dic):
s = ', '.join([ "{} ${} bills".format(dic[bill], bill) for bill in dic])
print(s)
disp(solve(amnt))
假设你有 Python3,你可以使用 f-strings,并且你总是可以为这些事情使用循环。这样,每个账单大小的逻辑都是一致的:
def print_change(amnt, bill_sizes=(100, 50, 25, 10, 5, 1)):
# loop over bill sizes
for bill_size in bill_sizes:
# skip if there isn't enough left for this bill
if amnt >= bill_size:
# remove n number of bills from amnt
n = amnt // bill_size
amnt -= n * bill_size
# print the results, with an 's' if there are more than one
print(f'{n} ${bill_size} Bill' + ('s' if n > 1 else ''))
print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
print_change(int(input("Please input amount: ")))
你的逻辑是错误的。这才是正确的做法。
if amount >= 100:
print(amount // 100, '100$ notes')
amount = amount % 100
if amount >= 50:
print('1 50$ notes')
amount = amount % 50
And so on
我正在尝试在 Python 中制作类似 ATM 的程序。这个想法是用户输入任意数量的钱,并且将打印最小数量的账单(100, 50, 25, 10, 5)。
例如:
输入: 258
预期输出:“2 张 100 美元的钞票,1 张 50 美元的钞票,1 张 5 美元的钞票,3 张 1 美元的钞票”。
该程序适用于 5 的倍数的数字,但我似乎无法让 10 美元和 1 美元的钞票表现相同。这是代码:
print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
amnt = int(input("Please input amount: "))
if amnt >= 100:
if amnt // 100 >= 2:
print(amnt // 100, "0 Bills")
else:
print("1 0 Bill")
if (amnt // 50) % 2 != 0:
print("1 Bill")
if (amnt // 25) % 2 != 0:
print("1 Bill")
if (amnt // 10) % 2 != 0:
print(amnt // 10, " Bills")
if (amnt // 5) % 2 != 0 and (amnt // 25) % 2 == 0:
print("1 Bill")
if (amnt // 1) % 2 != 1:
print((amnt // 1), " Bills")
我正在使用 (//) 运算符,因为它会告诉您右边的数字中有多少是左边的数字。然后将 (%) 运算符与 (!= 0) 一起使用。这似乎适用于 100、50、25,但不适用于 10 和 1。我该如何解决这个问题?
我只是添加了一个 elif 来检查他们是否输入了 1,它似乎符合我的要求。
print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
amnt = int(input("Please input amount: "))
if amnt >= 100:
if amnt // 100 >= 2:
print(amnt // 100, "0 Bills")
else:
print("1 0 Bill")
if (amnt // 50) % 2 != 0:
print("1 Bill")
if (amnt // 25) % 2 != 0:
print("1 Bill")
if (amnt // 10) % 2 != 0:
print(amnt // 10, " Bills")
if (amnt // 5) % 2 != 0 and (amnt // 25) % 2 == 0:
print("1 Bill")
if (amnt // 1) % 2 != 1:
print((amnt // 1), " Bills")
elif amnt == 1:
print((amnt // 1), " Bills")
一个更简洁的解决方案是使用一个函数来为您执行此操作,以防万一您决定更改硬币价值。
print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
amnt = int(input("Please input amount: "))
def solve(m):
bills = [100, 50, 25, 10, 5, 1]
dic = {}
for bill in bills:
if m >= bill:
dic[bill] = m // bill
m -= dic[bill] * bill
return dic
def disp(dic):
s = ', '.join([ "{} ${} bills".format(dic[bill], bill) for bill in dic])
print(s)
disp(solve(amnt))
假设你有 Python3,你可以使用 f-strings,并且你总是可以为这些事情使用循环。这样,每个账单大小的逻辑都是一致的:
def print_change(amnt, bill_sizes=(100, 50, 25, 10, 5, 1)):
# loop over bill sizes
for bill_size in bill_sizes:
# skip if there isn't enough left for this bill
if amnt >= bill_size:
# remove n number of bills from amnt
n = amnt // bill_size
amnt -= n * bill_size
# print the results, with an 's' if there are more than one
print(f'{n} ${bill_size} Bill' + ('s' if n > 1 else ''))
print("Hi! Welcome to Python Bank. \nHow much would you like to withdraw?")
print_change(int(input("Please input amount: ")))
你的逻辑是错误的。这才是正确的做法。
if amount >= 100:
print(amount // 100, '100$ notes')
amount = amount % 100
if amount >= 50:
print('1 50$ notes')
amount = amount % 50
And so on