【发布时间】:2020-04-23 19:52:26
【问题描述】:
我在回答以下问题的 Python 测验时遇到了一些问题:
给定两个数字 X 和 Y,编写一个函数: 返回 X 和 Y 之间的偶数,如果 X 大于 Y,则返回 x 和 y 之间的奇数
例如,取整数 10 和 2 。该函数将返回 2 到 10 之间的所有偶数。
我真的很感激一些帮助,因为我还是个新手
这是我的代码:
def number_game(x,y):
num = range(x,y)
for e in num:
if x > y:
return e%2 == 0
else:
return e%3 == 0
这里是测试用例:
test.assert_equals(number_game(2,12), [3, 5, 7, 9, 11])
test.assert_equals(number_game(0,0), [])
test.assert_equals(number_game(2,12), [3, 5, 7, 9, 11])
test.assert_equals(number_game(200,180), [180, 182, 184, 186, 188, 190, 192, 194, 196, 198])
test.assert_equals(number_game(180,200), [181, 183, 185, 187, 189, 191, 193, 195, 197, 199])
【问题讨论】:
-
return e%2 == 0是布尔值,而不是数值 -
num = range(x,y)这应该是非包容性的吗? -
您的 e%3 比较不太正确 - 您应该在两种情况下比较
a%2,但要比较不同的数字。试着弄清楚自己是哪一个! -
@vash_the_stampede:基于测试用例,上界独占。因为否则
200应该在最后一个测试用例中。 -
只要使用
number_game = lambda x, y: [i for i in filter(lambda i: i%2 == (x > y), range(*(x, y+1) if y > x else (y, x+1)))]
标签: python python-3.x