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

时间:2019-07-03 00:14:45

标签: python

因此,对于我的作业问题,我必须使用3个函数来创建sort()函数的手动版本:moreThan(),swap()和sort3()。 sort3()显然是调用其他两个函数的函数。我的问题是swap函数没有在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,好像根本没有交换值。

3 个答案:

答案 0 :(得分:2)

Python不允许函数在调用者的名称空间中重新绑定局部变量。这意味着您的swap()调用实际上并没有执行任何操作。您想通过以下方式调用该函数:

sortOne, sortThree = swap(sortOne, sortThree)

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

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

答案 1 :(得分:0)

您需要将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)

答案 2 :(得分:-1)

您的输出等于您的输入,因为您没有就地执行这些操作。当您将这些值作为参数传递给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的值。