正如标题已经说明我正在寻找一个简单的表达式来找到n
以下的最大奇数:
我想将此代码内联到算术表达式中,并且不希望使用三元运算符。有没有算术方法来找到这个奇数?
答案 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))
希望这有帮助