gpt4 book ai didi

python - 函数的大小变化导致不同的答案

转载 作者:行者123 更新时间:2023-12-01 07:29:34 25 4
gpt4 key购买 nike

我和一个 friend 编写了这两个函数来回答一个问题:如果给定找零的总值(value),您需要找回多少硬币。25美分、10角、5美分和1美分:

我们的变化值的大小给了我们不同的答案,但我不确定如何解释这种差异

def num_coins(cents):
coins = [25, 10, 5, 1]
count = 0
for coin in coins:
while cents >= coin:
cents = cents - coin
count += 1

return count

#########

def coin_return(change):

coin_options = [.25,.10,.05,.01]
number_of_coins = 0

for coin in coin_options:
while change >= coin:
number_of_coins += 1
change = change - coin

return number_of_coins

print(coin_return(.24))
print(num_coins(24))

正确的输出是六、二角钱和四便士。 num_coins 函数返回此值,而 coin_return 函数返回 5。这里发生了什么事?我是否遗漏了一些明显的东西?

最佳答案

正如其他人已经在评论中指出的那样,问题是 float 近似,正如您从下面的代码中看到的:

def num_coins(cents, coins):
count = 0
for coin in coins:
while cents >= coin:
print(cents)
cents = cents - coin
count += 1
return count

int一起使用(准确):

print(num_coins(24, [25, 10, 5, 1]))
Cents: 24
Cents: 14
Cents: 4
Cents: 3
Cents: 2
Cents: 1
6

float 一起使用:

print(num_coins(.24, [0.25, 0.10, 0.05, 0.01]))
Cents: 0.24
Cents: 0.13999999999999999
Cents: 0.03999999999999998
Cents: 0.029999999999999978
Cents: 0.019999999999999976
5
<小时/>

您可以使用round()函数解决这个问题,例如:

def num_coins(cents, coins, precision):
count = 0
for coin in coins:
while round(cents, precision) >= round(coin, precision):
cents = cents - coin
count += 1
return count


print(num_coins(.24, [0.25, 0.10, 0.05, 0.01], 2))
# 6
print(num_coins(24, [25, 10, 5, 1], 0))
# 6
<小时/>

另一种方法是使用 math.isclose() :

import math


def num_coins(cents, coins):
count = 0
for coin in coins:
while cents > coin or math.isclose(cents, coin):
cents = cents - coin
count += 1
return count


print(num_coins(.24, [0.25, 0.10, 0.05, 0.01]))
# 6
print(num_coins(24, [25, 10, 5, 1]))
# 6
<小时/>

或者,您可以坚持使用 int 或使用 decimal来自标准库的模块。

关于python - 函数的大小变化导致不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57280923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com