我正在做加油,这是CS50p中的一道题;我已按照指示重组了 Fuel.py 代码,并且已通过检查 50。不幸的是,我的 test_fuel.py 代码似乎未通过 check50,但当我按照问题集说明检查时,它通过了 100%。有人可以告诉我我做错了什么吗?
这是我的 test_fuel.py 代码
from fuel import convert, gauge
import pytest
def test_zero_division():
with pytest.raises(ZeroDivisionError):
convert("2/0")
def test_value_error():
with pytest.raises(ValueError):
convert("cat/cat")
def test_convert():
assert convert("1/2") = 50
assert convert("1/100") == 1
assert convert("99/100") == 99
def test_gauge():
gauge(50) == "50%"
gauge(1) == "E"
gauge(99) == "F"
这是我的fuel.py 代码,我正在测试的代码。
def main():
fraction = input("Fraction: ")
f = convert(fraction)
percent = gauge(f)
print(percent)
def convert(fraction):
while True:
try:
numerator, denominator = fraction.split("/")
denominator = int(denominator)
numerator = int(numerator)
percent = int(numerator / denominator * 100)
if percent <= 100:
return percent
else:
fraction = input("Fraction: ")
pass
except (ZeroDivisionError,ValueError):
raise
def gauge(percent):
# tank is full
if percent >= 99:
return "F"
# tank is empty
elif percent <= 1:
return "E"
# tank is not full or empty
else:
return str(percent) + "%"
if __name__ == "__main__":
main()
我希望我的 test_fuel.py 通过 check50;但只有当我按照问题集说明进行测试时它才会通过。
您发布的代码不包含
gauge()
功能。然而,我在没有运行你的代码的情况下注意到了 3 个错误。
第一个错误与这两个断言有关:
assert fuel.convert("1/2") == 1 / 2
assert fuel.convert("3/4") == 3 / 4
查看说明。他们说:
convert()
函数应该“以百分比形式返回分数,四舍五入到 0 到 100 之间最接近的整数值”。所以应该是:
assert fuel.convert("1/2") == 50
assert fuel.convert("3/4") == 75
第二个错误与 gauge()
函数有关。
assert fuel.gauge(1/2) == "50%"
assert fuel.gauge(99/100) == "F"
assert fuel.gauge(0/100) == "E"
说明说:“gauge 需要一个整数并返回一个字符串”所以这些应该是:
assert fuel.gauge(50) == "50%"
assert fuel.gauge(99) == "F"
assert fuel.gauge(0) == "E"
最后,我注意到你的转换函数有return fraction_
。我很确定
fraction_
是浮点数而不是整数。修复这 3 次,应该就可以了。
因此,我们需要时刻牢记是否有人向我们提出要求,以及我们正在给予什么。