我想尝试自己快速排序,但是函数在执行它们时总是给我一个错误。
目前的守则:
import random
pivot = 0
mop = 0
vop = 0
bobl = 0
lista = [2, 5, 1, 7, 9, 4, 6, 3, 8]
def mopcom():
if lista.index(mop)>lista.index(pivot):
mop = random.choice(lista)
mopcom()
def vopcom():
if lista.index(vop)<lista.index(pivot):
vop = random.choice(lista)
vopcom()
pivot = random.choice(lista)
mop = random.choice(lista)
vop = random.choice(lista)
mopcom()引起问题的两个职能:
def mopcom():
if lista.index(mop)>lista.index(pivot):
mop = random.choice(lista)
mopcom()
def vopcom():
if lista.index(vop)<lista.index(pivot):
vop = random.choice(lista)
vopcom()错误:
Traceback (most recent call last):
File "C:/Users/antem/OneDrive/Radna površina/pametno.py", line 22, in <module>
mopcom()
File "C:/Users/antem/OneDrive/Radna površina/pametno.py", line 11, in mopcom
if lista.index(mop)>lista.index(pivot):
UnboundLocalError: local variable 'mop' referenced before assignment请不要告诉我,我做错了快速排序,因为我想尝试这样做,我自己。告诉我为什么这会给我带来错误
发布于 2022-06-15 21:50:22
摘要:使用函数参数。
这些全局变量对你没有任何好处。
你写道:
def mopcom():
if lista.index(mop)>lista.index(pivot):
mop = random.choice(lista)
...第2行读取mop,第3行向其写入。那么,它写到一个不同的mop,它写到一个新创建的局部变量的名称。然后退出函数,本地将超出作用域,并被垃圾收集。
您可以使用global关键字。但是,将相关变量作为形式参数传递,或者使其成为class并引用self.mop要好得多。
发布于 2022-06-15 21:49:49
在python中,变量的作用域是默认的。考虑一下这个片段:
x = 3
def foo():
x = 4 # This is a new, different variable also called x
foo()
print(x) # Prints 3正因为如此,mop在mopcom中被视为不同的值。要解决这个问题,请添加行global mop。这告诉python mop实际上是一个全局值。
import random
pivot = 0
mop = 0
vop = 0
bobl = 0
lista = [2, 5, 1, 7, 9, 4, 6, 3, 8]
def mopcom():
global mop
global pivot
global lista
if lista.index(mop)>lista.index(pivot):
mop = random.choice(lista)
mopcom()
def vopcom():
global vop
global lista
global pivot
if lista.index(vop)<lista.index(pivot):
vop = random.choice(lista)
vopcom()
pivot = random.choice(lista)
mop = random.choice(lista)
vop = random.choice(lista)
mopcom()https://stackoverflow.com/questions/72638197
复制相似问题