[英]How to find the number in the middle
n1
, n2
和n3
是數字。 我想在中間返回數字,例如,如果數字是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.