簡體   English   中英

如何在中間找到號碼

[英]How to find the number in the middle

n1n2n3是數字。 我想在中間返回數字,例如,如果數字是7、2、9,我想返回7。使用我當前編寫的代碼,無論如何它總是返回n3 我不確定哪里出了問題。

def mid3(n1, n2, n3):
    if n1 > (n2 or n3) and n1 < (n2 or n3):
        return n1
    elif n2 < (n1 or n3) and n2 > (n1 or n3):
        return n2
    else:
        return n3

在python中,(與大多數語言不同),實際上允許您使用類似n1 <= n2 <= n3因此您的代碼可以讀取:

if n1 <= n2 <= n3:
    return n2
elif n2 <= n1 <= n3:

等等,但是您將不得不輸入所有可能性,因此使用一個內襯更加Python化:

return sorted([n1, n2, n3])[1]

這可以概括為:

def mid(*items):
    """ Return the middle value from all of the parameters """
    return sorted(items)[len(items)//2]

編程語言不能那樣工作。

要理解為什么不這樣做,重要的是要看到句子“ N1大於N2或N3”實際上是“ N1大於N2並且N1大於N3”的簡寫。 (請注意,這是一個相當復雜的轉換-其中“與”會變成“或”,要確切地找出原因,這是一個相當微妙的問題。)

我們的大腦已經習慣了這種速記方式,以至於我們甚至都沒有注意到差異。 但是編譯器不是-它們是非常文字的,因此不可能(容易地)使計算機語言允許您使用類似的快捷方式進行編寫。

該算法可有效計算3個值的中位數:

max(min(n1, n2), min(max(n1, n2), n3))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM