我正在嘗試制作自己的冒泡排序演算法以用于學習目的。我這樣做是:
- 制作一個隨機陣列
- 檢查陣列的前兩個索引是否需要交換
- 它在整個串列中都這樣做
- 并一遍又一遍地做,直到回圈到最后它不再需要交換任何東西然后回圈中斷
但是當我在類中列印任何變數時,它說該類沒有變數的屬性。這是我現在的代碼
from random import randint
class bubbleSort:
def __init__(self, size):
self.size = size # Array size
self.array = [] # Random array
self.sorted = self.array # Sorted array
self.random = 0 # Random number
self.count = 0
self.done = False
self.equal = 0
while self.count != self.size:
random = randint(1, self.size)
if random in self.array:
pass
else:
self.array.append(random)
self.count = 1
def sort(self):
while self.done != True:
self.equal = False
for i in range(self.size):
if i == self.size:
pass
else:
if self.sorted[i] > [self.tmp]:
self.equal = 1
if self.equal == self.size:
self.done = True
else:
self.sorted[i], self.sorted[i 1] = self.sorted[i 1], self.sorted[i]
new = bubbleSort(10)
print(bubbleSort.array)
這就是輸出
Traceback (most recent call last):
File "/home/musab/Documents/Sorting Algorithms/Bubble sort.py", line 38, in <module>
print(bubbleSort.array)
AttributeError: type object 'bubbleSort' has no attribute 'array'
uj5u.com熱心網友回復:
在您的情況下,您有一個名為的類bubbleSort和一個名為的類的實體new,您可以使用它創建new = bubbleSort(10).
由于bubbleSort只參考類本身,它不知道任何特定實體的成員欄位(您self.xyz = abc在類函式內部使用創建的欄位。這很好,想象一下有兩個實體
b1 = bubbleSort(10)
b2 = bubbleSort(20)
并且您想訪問 的陣列b1,您需要以某種方式指定它。方法是呼叫b1.array.
因此,在您的情況下,您需要print(new.array).
uj5u.com熱心網友回復:
bubbleSort是一個型別別,這個型別別的每個物件都有自己的array. 要訪問array,必須通過類物件來完成。__init__在創建類物件時呼叫。
嘗試以下方法:
bubbleSortObj = bubbleSort(10) # create a bubbleSort object
print(bubbleSortObj.array) # print the array before sort
bubbleSortObj.sort() # sort the array
print(bubbleSortObj.array) # print the array after sort
筆記
- 在
__init__你有:
self.array = [] # Random array
self.sorted = self.array # Sorted array
在這種情況下,array指向sorted同一個串列并改變一個會改變另一個。要制作串列的副本,一種方法(在許多方法中)是呼叫sorted = list(array)
- 如果有任何區域函式變數,您可以洗掉
self,例如,self.count = 0可以只是count = 0,因為一旦使用它就不再需要它,也不需要成為類成員
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/531685.html
標籤:python-3.x排序
上一篇:CTE傳遞多個子查詢
