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
答案 0 :(得分:1)
在python中,(与大多数语言不同),实际上允许您使用如下构造:n1 <= n2 <= n3
,因此您的代码可以读取:
if n1 <= n2 <= n3:
return n2
elif n2 <= n1 <= n3:
等。但是你必须输入所有的可能性,所以使用一个衬垫更加pythonic:
return sorted([n1, n2, n3])[1]
这可以概括为:
def mid(*items):
""" Return the middle value from all of the parameters """
return sorted(items)[len(items)//2]
答案 1 :(得分:1)
编程语言不会那样工作。
要理解为什么不这样,重要的是看到句子&#34; N1大于N2或N3&#34;实际上是&#34; N1大于N2且N1大于N3&#34;的快捷版本。 (请注意,这是一个非常复杂的转换 - 其中AND转变为OR,并且确切地找出原因是一个相当微妙的问题。)
我们的大脑已经习惯了这种速记,我们甚至没有注意到它们之间的区别。但是编译器并不是 - 它们非常直观,因此制作一种允许您使用类似快捷方式编写的计算机语言是不可能的(轻松)。
答案 2 :(得分:0)
此算法可有效计算3个值的中位数:
max(min(n1, n2), min(max(n1, n2), n3))