python按面值找零_python中文找零的代码中的数学公示能解释一下吗?

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:26   839   0

匿名用户

1级

2017-10-19 回答

'''

现在你有125元, 那么首先你需要确定最大面额, 100-50-20-....

依次从大到小查找, 并做整除运算(python3.x中整除是//)

125 // 100 = 1

(125 - 100 * 1) // 50 = 0

(125 - 100 * 1 - 50 * 0) // 20 = 1

...

就是按照面额从大到小对余额做整除

如果你学过函数的话, 请看下面的函数

'''

def f(money, value=(100, 50, 20, 10, 5, 1)):

# 构建结果列表, 最后多一个元素存储无法找零的数额

d = [0] * (len(value) + 1)

for i in range(len(value)):

if money == 0:

return d

if money > value[i]:

d[i] = money // value[i]

money %= value[i]

# 最后剩余的金额大于最小的面额, 即无法找零的金额

if money > 0:

d[-1] = money

return d

# 打印结果函数

def display(d, value=(100, 50, 20, 10, 5, 1)):

for i in range(len(value)):

if d[i] != 0:

print("{}元 {}张".format(value[i], d[i]))

if d[-1] != 0:

print("无法找零{}元".format(d[-1]))

if __name__ == '__main__':

value = (100, 50, 20, 10, 5, 1)

d = f(1234.5, value)

display(d, value)

'''

上面的函数更灵活, 可以根据设定的面额进行处理, 而不需要大规模修改代码

上面的结果为

100元 12.0张

20元 1.0张

10元 1.0张

1元 4.0张

无法找零0.5元

突然有一天, 20和10元的钞票没了, 这时只需修改value = (100, 50, 5, 1)

结果

100元 12.0张

5元 6.0张

1元 4.0张

无法找零0.5元

'''

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP