我的循环将 运行 变成负数,即使我是一个 if 语句告诉不要
my loop will run into negative numbers even when I am an if statement telling not to
这是一个简单的程序,我输入的是 $ 的零钱,我必须 return 硬币的总数。我的程序 运行 正确,直到它归结为数便士。有人能看到,为什么它会给出负输出,即使我用 if 语句告诉程序在它达到 0.
后不要 运行
import sys
import cs50
val = cs50.get_float(("Change owed: "))
count = 0
newVal = val
while newVal > .25:
newVal = round(newVal - 0.25, 2)
print(newVal)
count +=1
if newVal == 0.25:
newVal = round(newVal - 0.25, 2)
print(newVal)
count +=1
elif newVal < 0.25:
newVal = round(newVal - 0.10, 2)
print(newVal)
count +=1
if newVal < 0.10:
newVal = round(newVal - 0.05, 2)
print(newVal)
count +=1
if newVal < 0.05:
newVal = round(newVal - 0.01, 2)
print(newVal)
count +=1
if newVal < 0:
break
print(count)
您遇到的问题是浮点错误。即
>>> 0.03 - 0.01
0.019999999999999997
如果让您将给定值乘以 100 可能会更好,这样您将处理整数值而不是小数。
换句话说:
你应该除法而不是循环和减法,即
coin_types = (25, 10, 5, 1)
def solution(value: int):
coins = 0
for coin in coin_types:
coins += value // coin
value = value % coin
if value == 0:
return coins
val = cs50.get_float(("Change owed: "))
print(solution(int(val*100)))
就个人而言,我不知道您的代码在做什么。这是一个使用除法和 mod 的版本。它更直接。
import sys
import cs50
val = cs50.get_float(("Change owed: "))
count = 0
newVal = int(val * 100)
if newVal >= 25:
count += int(newVal / 25)
newVal = newVal % 25
if newVal >= 10:
count += int(newVal / 10)
newVal = newVal % 10
if newVal >= 5:
count += int(newVal / 5)
newVal = newVal % 5
if newVal >= 1:
count += int(newVal / 1)
print(count)
这是一个简单的程序,我输入的是 $ 的零钱,我必须 return 硬币的总数。我的程序 运行 正确,直到它归结为数便士。有人能看到,为什么它会给出负输出,即使我用 if 语句告诉程序在它达到 0.
后不要 运行import sys
import cs50
val = cs50.get_float(("Change owed: "))
count = 0
newVal = val
while newVal > .25:
newVal = round(newVal - 0.25, 2)
print(newVal)
count +=1
if newVal == 0.25:
newVal = round(newVal - 0.25, 2)
print(newVal)
count +=1
elif newVal < 0.25:
newVal = round(newVal - 0.10, 2)
print(newVal)
count +=1
if newVal < 0.10:
newVal = round(newVal - 0.05, 2)
print(newVal)
count +=1
if newVal < 0.05:
newVal = round(newVal - 0.01, 2)
print(newVal)
count +=1
if newVal < 0:
break
print(count)
您遇到的问题是浮点错误。即
>>> 0.03 - 0.01
0.019999999999999997
如果让您将给定值乘以 100 可能会更好,这样您将处理整数值而不是小数。
换句话说:
你应该除法而不是循环和减法,即
coin_types = (25, 10, 5, 1)
def solution(value: int):
coins = 0
for coin in coin_types:
coins += value // coin
value = value % coin
if value == 0:
return coins
val = cs50.get_float(("Change owed: "))
print(solution(int(val*100)))
就个人而言,我不知道您的代码在做什么。这是一个使用除法和 mod 的版本。它更直接。
import sys
import cs50
val = cs50.get_float(("Change owed: "))
count = 0
newVal = int(val * 100)
if newVal >= 25:
count += int(newVal / 25)
newVal = newVal % 25
if newVal >= 10:
count += int(newVal / 10)
newVal = newVal % 10
if newVal >= 5:
count += int(newVal / 5)
newVal = newVal % 5
if newVal >= 1:
count += int(newVal / 1)
print(count)