python - 功能测试没有按预期进行(AoC 第 4 天的一部分)
问题描述
我写了一个函数来检查数据是否正确。要求如下:
byr-(出生年份) - 四位数字;至少 1920 年,最多 2002 年。
iyr(发行年份)——四位数字;至少 2010 年,最多 2020 年。
eyr(到期年份)——四位数字;至少 2020 年,最多 2030 年。
def check_byr_iyr_eyr(line):
statement = True
if line[:3] == "byr":
if (len(line[line.index(':')+1:]) != 4 or
1920 > int(line[line.index(':')+1:]) > 2002 ):
statement = False
elif line[:3] == "iyr":
if (len(line[line.index(':')+1:]) != 4 or
2010 > int(line[line.index(':')+1:]) > 2020 ):
statement = False
elif line[:3] == "eyr":
if (len(line[line.index(':')+1:]) != 4 or
2020 > int(line[line.index(':')+1:]) > 2030 ):
statement = False
return statement
list = ['byr:1919', 'iyr:2010', 'eyr:2021', 'iyr:2019', 'iyr:1933',
'byr:1946', 'iyr:1919', 'eyr:2005']
for i in list:
print(check_byr_iyr_eyr(i))
'''
expected result:
False
True
True
True
False
True
False
False
'''
并且检查提供的样本的结果应该像多行注释“预期结果”一样,但不幸的是结果总是 True。
我不知道我做错了什么 - 条件对我来说似乎很好......
解决方案
考虑这一行:
1920 > val > 2002
结果与以下相同:
val < 1920 and val > 2002
这意味着 val既小于 1920 又大于 2002,这不可能是真的。
推荐阅读
- html - VS 代码自动完成
- c++ - 打印向量中的值
- selenium - 使用 Selenium 从输入元素(类型=提交)获取文本
- java - 失败:使用继承时 loginTest java.lang.NullPointerException。如何解决?
- html - 为什么 div 位置在不同的语言环境中发生变化?
- javascript - 将函数映射到数组时,GAS 导致“参数与方法签名不匹配”异常
- vb.net - 在用户回答多项选择题后,如何让我的程序在 vb.net 中继续下一个问题?
- android - 当应用程序在后台运行时,Android Listener 停止运行
- crop - 如何基于掩码裁剪所有对象,Mask-RCNN
- jmeter - 如何在 JSON POST 请求中关联两个变量