三个数中最小的一个

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) 的含义以及之后的其余代码。这是否意味着布尔值

【问题讨论】:

yes not 结果为布尔值 尝试为该表达式提供不同的数据并查看结果。 12 / 44 / 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])

【讨论】:

以上是关于三个数中最小的一个的主要内容,如果未能解决你的问题,请参考以下文章

贪心算法之随机三个数的最小公倍数

编写一个 Java 程序,求三个数的绝对值的第二个最小值

找出三个数中最小的数

给定的数组任意取出三个数(要求全部取到且不能重复)求和,找出和中最小值 Java 说说思路或者算法就

蓝桥杯:算法训练之最大最小公倍数

找出三个数中的最大值或者最小值