在Python中返回偶数和奇数
我在回答一个python测验时遇到了一点问题: 给定两个数字X和Y,编写一个函数: 返回X和Y之间的偶数,如果X大于Y,则返回X和Y之间的奇数 例如,取整数10和2。该函数将返回2到10之间的所有偶数 我还是个新手,非常感谢你的帮助 这是我的密码:在Python中返回偶数和奇数,python,python-3.x,Python,Python 3.x,我在回答一个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 ==
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])
这里有一些问题:
x>=y
,则范围(x,y)
为空,因此for
循环不会枚举任何值李>
e%2==0
和e%3==0
是相等检查,因此将返回布尔值李>
e%3==0
检查该数字是否可除以3
,而不是奇数;及范围(…)
对象,如:
def number_game(x,y):
if x > y:
if y % 2 == 1:
y += 1
return list(range(y, x, 2))
else:
if x % 2 == 0:
x += 1
return list(range(x, y, 2))
例如:
>>> number_game(14, 25)
[15, 17, 19, 21, 23]
>>> number_game(15, 25)
[15, 17, 19, 21, 23]
>>> number_game(25, 14)
[14, 16, 18, 20, 22, 24]
>>> number_game(25, 13)
[14, 16, 18, 20, 22, 24]
>>> number_game(2,12)
[3, 5, 7, 9, 11]
>>> number_game(0,0)
[]
>>> number_game(2,12)
[3, 5, 7, 9, 11]
>>> number_game(200,180)
[180, 182, 184, 186, 188, 190, 192, 194, 196, 198]
>>> number_game(180,200)
[181, 183, 185, 187, 189, 191, 193, 195, 197, 199]
可通过以下方式使代码更加紧凑:
def number_game(x,y):
if x > y:
return list(range(y + (y%2), x, 2))
else:
return list(range(x+1-(x%2), y, 2))
因此,我们首先要检查x>y
,(或否)。因为如果x>y
我们应该构造一个范围(y,x,2)
,但问题可能是y
是奇数,所以我们首先检查它是否是奇数,如果是,我们增加值
如果
x发生类似的情况,那么这里有一些问题:
如果x>=y
,则范围(x,y)
为空,因此for
循环不会枚举任何值李>
e%2==0
和e%3==0
是相等检查,因此将返回布尔值李>
e%3==0
检查该数字是否可除以3
,而不是奇数;及
一旦返回某个内容,就退出函数
但是,我们可以编写一个避免循环的函数,首先检查数字,然后构造正确的范围(…)
对象,如:
def number_game(x,y):
if x > y:
if y % 2 == 1:
y += 1
return list(range(y, x, 2))
else:
if x % 2 == 0:
x += 1
return list(range(x, y, 2))
例如:
>>> number_game(14, 25)
[15, 17, 19, 21, 23]
>>> number_game(15, 25)
[15, 17, 19, 21, 23]
>>> number_game(25, 14)
[14, 16, 18, 20, 22, 24]
>>> number_game(25, 13)
[14, 16, 18, 20, 22, 24]
>>> number_game(2,12)
[3, 5, 7, 9, 11]
>>> number_game(0,0)
[]
>>> number_game(2,12)
[3, 5, 7, 9, 11]
>>> number_game(200,180)
[180, 182, 184, 186, 188, 190, 192, 194, 196, 198]
>>> number_game(180,200)
[181, 183, 185, 187, 189, 191, 193, 195, 197, 199]
可通过以下方式使代码更加紧凑:
def number_game(x,y):
if x > y:
return list(range(y + (y%2), x, 2))
else:
return list(range(x+1-(x%2), y, 2))
因此,我们首先要检查x>y
,(或否)。因为如果x>y
我们应该构造一个范围(y,x,2)
,但问题可能是y
是奇数,所以我们首先检查它是否是奇数,如果是,我们增加值
如果x使用列表理解的更具python风格的方法,也会发生类似的事情
def number_game(x,y):
if x > y:
return [n for n in range(y,x) if n%2==0]
elif y==x:
return []
else:
return [n for n in range(x,y) if n%2!=0]
使用列表理解的更具python风格的方法
def number_game(x,y):
if x > y:
return [n for n in range(y,x) if n%2==0]
elif y==x:
return []
else:
return [n for n in range(x,y) if n%2!=0]
使用生成器
(关键字产量
查看解决方案)
def number_游戏(x,y):
num=范围(最小(x,y),最大(x,y))
对于数字中的e:
如果x>y且e%2==0:
产量e
elif x
使用生成器查看解决方案
(收益率
关键字)
def number_游戏(x,y):
num=范围(最小(x,y),最大(x,y))
对于数字中的e:
如果x>y且e%2==0:
产量e
elif x
返回e%2==0
是一个布尔值,而不是一个数值num=range(x,y)
这应该是非包容性的吗?您的e%3比较不太正确-您应该在这两种情况下比较a%2
,但要比较不同的数字。试着弄清楚你自己要去哪@vash_the_stampede:基于测试用例,上界是独占的。因为否则200
应该是最后一个测试用例。只需使用number\u game=lambda x,y:[i为过滤器中的i(lambda i:i%2==(x>y),range(*(x,y+1)if y>x else(y,x+1))]
返回e%2==0
是一个布尔值,而不是数值num=range(x,y)
这应该是非包容性的吗?您的e%3比较不太正确-您应该在这两种情况下比较a%2
,但比较的数字不同。试着弄清楚你自己要去哪@vash_the_stampede:基于测试用例,上界是独占的。因为否则200
应该是最后一个测试用例。只需使用number\u 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))]
为什么要费心处理列表中的那些if
子句呢?你应该使用范围的步骤
参数。这一点很好,但由于OP使用了mod运算符,但并不完全正确,我认为在实际操作中显示它是有帮助的。另外,我认为这是更好的自文档化代码,但这正是我的偏好。事实上,它所做的工作是它所需要的两倍多,这在这里并不重要。除非x和y之间有巨大的差异<代码>测试。断言等于(数字游戏(10000000000000,-10000000000000),[-1000000000000,-99999999998,…
让我咯咯地笑,tho!为什么要为列表中的if
子句操心呢?你应该使用范围的步骤
参数。这很好,但由于OP使用了mod运算符,但不太正确,我认为在实际操作中显示它是有帮助的。另外,我认为这是更好的自我文档我喜欢代码,但那只是我的偏好