私は入力として配列を取得し、クイックソートアルゴリズムでそれをソートするクラスを開発しました。アルゴリズムは分割と征服の方法に基づいているので、再帰的です。グローバル値を設定しようとしていて、デフォルト値としてパーティション関数にパラメータを渡そうとしていますが、機能しません。 入力を求めた後、以下のエラーが表示されます。 これは誤りである:ここ特定の関数で入力を取得し、それを同じクラスの別の関数でPythonで使う方法はありますか?
def partition(self, start = gl_start , end = gl_end):
NameError: name 'gl_start' is not defined
は私が簡単な答えでこだわっている知っているコード
class quick:
def __init__(self,text = input(' Please insert an array: ')):
global gl_start
global gl_end
array = text.split(',')
gl_start = 0
gl_end = len(array) - 1
self.array = array
self.start = gl_start
self.end = gl_end
def partition(self, start = gl_start , end = gl_end):
pivot = self.array[start]
left = start + 1
right = end
done = False
while not done:
while left <= right and self.array[left] <= pivot:
left += left
while self.array[right] >= pivot and right >=left:
right -= right
if right < left:
done = True
else:
# swap places
print("Items swapped: {" + str(self.array[left]) + ' , ' + str(self.array[right]) + '} ')
temp=self.array[left]
self.array[left]=self.array[right]
self.array[right]=temp
# swap start with myList[right]
print("Pivotpoint swap : [" + str(self.array[start]) + '] ----> [' + str(self.array[right]) + '] ')
temp=self.array[start]
self.array[start]=self.array[right]
self.array[right]=temp
print(" Updated array is : " + str(myList))
return right
def quicksort(self, start = gl_start , end = gl_end):
if start < end:
# partition the list
pivot = self.partition(start, end)
# sort both halves
self.quicksort(start, pivot-1)
self.quicksort(pivot+1,end)
return self.array
myList = quick()
myList = quick.quicksort()
です。どんな助けもありがたいです ありがとうございました!
ほとんどの目立つエラーは 'text = input(...)'です。これは*正確に1回*実行され、その値はコンストラクタに 'text'引数が与えられていないすべての場合に共有されます。たとえば、 'text = None'; 'もし' textがNoneならば 'text = input()'の中で '__init__' –