繁体   English   中英

手动功能对3个数字进行排序,从低到高

[英]Manual function to sort 3 numbers, lowest to highest

因此,对于我的作业问题,我必须使用 3 个函数来创建 sort() 函数的手动版本:moreThan()、swap() 和 sort3()。 sort3() 显然是调用另外两个的函数。 我的问题是在 sort3() 中没有正确调用交换函数,并且从未真正执行过。

我一直在尝试更改 swap() 函数中的值,尝试在元组和列表中列出 swap() 的返回值,但这些都没有奏效。

def moreThan(moreOne, moreTwo):
    if moreOne > moreTwo:
        return True
    else:
        return False

def swap(swapOne, swapTwo):
    swapOne, swapTwo = swapTwo, swapOne
    return (swapOne, swapTwo)

def sort3(sortOne, sortTwo, sortThree):
    if moreThan(sortOne, sortTwo) == True:
        swap(sortOne, sortTwo)
        print("swap one worked")
    if moreThan(sortOne, sortThree) == True:
        swap(sortOne, sortThree)
        print("swap two worked")
    if moreThan(sortTwo, sortThree) == True:
        swap(sortTwo, sortThree)
        print("swap three worked")
    print(sortOne, sortTwo, sortThree)
sort3(1,3,2)

预期输出为 1,2,3。 但是,实际输出是 1,3,2,就好像这些值根本没有交换一样。

Python 不允许函数在调用者的命名空间中重新绑定局部变量。 这意味着您的 swap() 调用并没有真正做任何事情。 您想以这种方式调用该函数:

sortOne, sortThree = swap(sortOne, sortThree)

但在这种情况下,将其转换为函数并不能真正提高可读性或可重用性,因此您不妨内联该函数。

或者,如果您可以更改函数签名并将未排序的数据保留在像列表这样的可变数据结构上,您可能希望传递它,因此 swap 变为swap(list, index1, index2)

您需要将 sortOne、sortTwo 和 sortThree 设置为等于您的交换函数的输出:

def moreThan(moreOne, moreTwo):
    if moreOne > moreTwo:
        return True
    else:
        return False

def swap(swapOne, swapTwo):
    swapOne, swapTwo = swapTwo, swapOne
    return (swapOne, swapTwo)

def sort3(sortOne, sortTwo, sortThree):
    if moreThan(sortOne, sortTwo) == True:
        sortTwo, sortTwo = swap(sortOne, sortTwo)
        print("swap one worked")
    if moreThan(sortOne, sortThree) == True:
        sortOne, sortThree = swap(sortOne, sortThree)
        print("swap two worked")
    if moreThan(sortTwo, sortThree) == True:
        sortTwo, sortThree = swap(sortTwo, sortThree)
        print("swap three worked")
    print(sortOne, sortTwo, sortThree)
sort3(1,3,2)

您的输出等于您的输入,因为您没有就地执行这些操作。 当你将这些值作为参数传递给你的swap方法时, swap在它自己的变量中创建它自己的值副本,因此你的输入sortOne sortTwosortThree的值永远不会改变。 您可能希望像这样更改sort3函数:

def sort3(sortOne, sortTwo, sortThree):
if moreThan(sortOne, sortTwo) == True:
    sortOne,sortTwo = swap(sortOne, sortTwo)
    print("swap one worked")
if moreThan(sortOne, sortThree) == True:
    sortOne,sortThree = swap(sortOne, sortThree)
    print("swap two worked")
if moreThan(sortTwo, sortThree) == True:
    sortTwo,sortThree = swap(sortTwo, sortThree)
    print("swap three worked")
print(sortOne, sortTwo, sortThree)

因为这将更新sortOne sortTwosortThree的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM