我需要取一个任意长度的元组,并执行一个返回中点的操作。但是,我需要一个函数来处理任何长度的元组,所以我不确定如何去做。
def findMidpoint(P: tuple, Q: tuple) -> tuple:
user_input1 = input('Enter space-separated integers: ')
P = tuple(int(item) for item in user_input1.split())
user_input2 = input('Enter space-separated integers: ')
Q = tuple(int(item) for item in user_input2.split())
Midpoint
pass
def main():
# use to test the findMidpoint function
pass
if __name__ == "__main__":
main()
好的,在这里对你的问题进行一些自由处理,但假设你想要找到n维空间中任意两个点的中点,你可以对每个点的轴向值求平均值。例如:
P = (px, py)
Q = (qx, qy)
midpoint = ( (px + qx)*0.5, (py + qy)*0.5 )
显然,对于更多维度,你必须扩展它。对于您的代码,一般的n维解决方案可以使用zip:
def findMidpoint(P: tuple, Q: tuple) -> tuple:
return tuple((q + p) / 2 for p, q in zip(P, Q))
def main():
# use to test the findMidpoint function
assert findMidpoint(P=(0, 0), Q=(2, 2)) == (1, 1)
assert findMidpoint(P=(0, 0, 0), Q=(2, 2, 2)) == (1, 1, 1)
assert findMidpoint(P=(-2, -2, -2), Q=(2, 2, 2)) == (0, 0, 0)
if __name__ == "__main__":
main()
假设p和Q的长度相同。如果它们不是,你可以更进一步,使用zip_longest
:
from itertools import zip_longest
def findMidpoint(P: tuple, Q: tuple) -> tuple:
return tuple((q + p) / 2 for p, q in zip_longest(P, Q, fillvalue=0))
def main():
# use to test the findMidpoint function
assert findMidpoint(P=(0, 0), Q=(2, 2, 2)) == (1, 1, 1)
if __name__ == "__main__":
main()
这实际上是在说"如果没有给定轴的坐标,则假定它是零"