因此,对于我的作业问题,我必须使用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,好像根本没有交换值。
答案 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
sortTwo
和sortThree
从未更改。您可能想像这样更改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
sortTwo
和sortThree
的值。