python求奇偶数和_用Python返回偶数和奇数

这里有一些问题:如果x >= y,则range(x, y)为空,因此for循环将不会枚举任何值

e % 2 == 0和e % 3 == 0是相等检查,因此将返回布尔值

e % 3 == 0检查数字是否可由3分割,而不是奇数;以及

一旦你返回了一些东西,你就退出了函数。

但是,我们可以编写一个避免循环的函数,首先检查数字,然后构造正确的range(..)对象,比如: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,我们应该构造一个range(y, x, 2),但是问题可能是y是奇数,所以我们首先检查它是否是奇数,如果是,我们就增加值。

如果x <= y:我们构造一个range(x, y, 2),会发生类似的事情,但是如果x是偶数,我们也会增加它。

因为我们将两个步骤(在range(..)中的最后一个参数)分为两步,这也将更有效地构造列表,因为range(..)函数不会测试一个数是否为偶数/奇数,而只是用2增加变量。

如果您确实不想“具体化”iterable(将元素放入列表中),而只是返回相关的range(..)iterable,我们可以这样做:def number_game(x,y):

if x > y:

return range(y + (y&1), x, 2)

else:

return range(x+1-(x&1), y, 2)

这样做的好处是range(..)允许快速的成员检查,一个范围也可以非常有效地切片,等等。因此您可以保留range(..)对象,并且可以后处理它。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值