三个数中最小的一个
Posted
技术标签:
【中文标题】三个数中最小的一个【英文标题】:Smallest of three numbers 【发布时间】:2020-07-16 22:10:36 【问题描述】:# Using division operator to find
# minimum of three numbers
def smallest(x, y, z):
if (not (y / x)): # Same as "if (y < x)"
return y if (not (y / z)) else z
return x if (not (x / z)) else z
# Driver Code
if __name__== "__main__":
x = 78
y = 88
z = 68
print("Minimum of 3 numbers is",
smallest(x, y, z))
# This code is contributed
# by ChitraNayal
所以我在不使用 min 函数的情况下找到三个数字中最小的最短方法找到了上面的代码。我不太明白not(y/z)
的含义以及之后的其余代码。这是否意味着布尔值
【问题讨论】:
yesnot
结果为布尔值
尝试为该表达式提供不同的数据并查看结果。 12 / 4
与 4 / 12
,然后尝试 not (12 / 4)
和 not (4 / 12)
。
so not(y/z) 是什么意思?我的意思是 y/z 意味着什么可能导致一些布尔值作为结果
如果涉及负数,这将不起作用
【参考方案1】:
假设这是 Python 2,除以两个整数使用 integer division,它只返回“整体”部分 - 即小数点左边的部分。因此,如果 x 小于 y,x/y 将返回 0,在布尔上下文中计算为 False
,因此 not(x/y)
相当于询问 x 是否小于 y。
【讨论】:
哦,好吧!我正在使用 Python 3。所以每当我执行操作1/2
时,它都会导致 0.5
没有布尔类型。所以用 x//y
替换 x/y
会有所帮助吗?
@Tanmay 是的,对于 Python 3,您必须使用 //
才能使这个 sn-p 工作【参考方案2】:
def smallest(x, y, z):
if (not (y // x)): # Same as "if (y < x)"
return y if (not (y // z)) else z
return x if (not (x // z)) else z
print(smallest(3,5,7))
我认为使用地板除法 (//) 是为了代替普通除法 (/)。有了这个,我们可以将零作为除法的返回值,例如 3//5,在 python 中,零被认为是一个假值。
【讨论】:
【参考方案3】:当您正在探索真实性和整数并想要一个简短的非最小实现时,以下将起作用 =)
def smallest(x, y, z):
return ((x,z)[z<x],(y,z)[z<y])[y<x]
【讨论】:
【参考方案4】:如果您正在寻找最短的方法(不使用 min),另一种方法是对数组进行排序并获取第一个元素。
x = 78
y = 88
z = 68
numbers = [x, y, z]
numbers.sort()
print(numbers[0])
【讨论】:
以上是关于三个数中最小的一个的主要内容,如果未能解决你的问题,请参考以下文章