Python - 简单表达式,用于查找n以下的最大奇数

时间:2017-12-28 15:09:56

标签: python python-3.x numbers

正如标题已经说明我正在寻找一个简单的表达式来找到n以下的最大奇数:

我想将此代码内联到算术表达式中,并且不希望使用三元运算符。有没有算术方法来找到这个奇数?

5 个答案:

答案 0 :(得分:3)

testNumber是你的变量

(testNumber - 1 >> 1 << 1) | 1 # LESS THAN OR EQUAL TO

(testNumber - 2 >> 1 << 1) | 1 # LESS THAN

答案 1 :(得分:2)

以下是纯粹的算术解决方案:

def greatest_odd_number_below(n): return (n//2)*2 - 1

编辑1 :对于浮点输入:

# python 2 solution
from math import ceil
def greatest_odd_number_below_floats(n): return (int(ceil(n))//2)*2 - 1

编辑2 :正如@PM 2Ring在评论中指出的那样,math.ceil在python 3中返回int,因此您可以删除额外的投射到{{1 }}

int

答案 2 :(得分:2)

另一种方式:

n - n%2 - 1

演示:

>>> for n in range(10):
        print(n, '->', n - n%2 - 1)

0 -> -1
1 -> -1
2 -> 1
3 -> 1
4 -> 3
5 -> 3
6 -> 5
7 -> 5
8 -> 7
9 -> 7

答案 3 :(得分:0)

babygameOver 是对的。没有这样的内置函数,所以你应该自己实现它。

为了得到我的2美分,你可以使用lambda表达式。看起来很简单。

>>> odd = lambda n: n-1 if n % 2 == 1 else n - 1
>>> odd(3)
3
>>> odd(744)
743

答案 4 :(得分:-1)

没有条件,您无法解决问题。

但你可以按照自己的方式做到这一点。

def odd(n):
    if n%2==0:
        return n-1
    return n

print(odd(3))

希望这有帮助