Definieren Sie eine Funktion test_sort, die ein Tupel mit einer Sortierfunktionsreferenz und einer Funktionsbeschreibung als Parameter verwendet und diese Sortierfunktion mit den Daten der vorherigen Task ausführt. Verfolgen Sie die Vergleiche für jeden Datensatz, berechnen Sie die durchschnittliche Anzahl der Vergleiche für die Liste der Zufallslisten.TypeError: 'str' -Objekt ist nicht aufrufbar-Python
Der Verweis auf die Sortierfunktion bedeutet nur, dass Sie eine Funktionsdefinition genau wie jeden anderen Wert in eine Variable einfügen und diese Funktionsvariable dann ausführen können. Sie können eine Funktionsdefinition auch als Argument an eine andere Funktion übergeben und den resultierenden Parameter dann als Funktion ausführen.
Dies ist der Code
def test_sort(function_tuple, a_sorte, a_reverse, a_random):
Number.comparisons = 0
f = function_tuple[0]
f(a_sorte)
x = Number.comparisons
Number.comparisons = 0
f = function_tuple[0]
f(a_reverse)
y = Number.comparisons
Number.comparisons = 0
f = function_tuple[0]
for i in range(len(a_random)):
f(a_random[i])
z = Number.comparisons
print("{0} {1} {2} {3}".format(
function_tuple[1], x, y, z))
return
der Haupt:
import copy
from sorts_array import Sorts
import functions
SORTS = (
('Bubble Sort', Sorts.bubble_sort),
('Insertion Sort', Sorts.insertion_sort),
('Selection Sort', Sorts.selection_sort),
('Merge Sort', Sorts.merge_sort),
('Quick Sort', Sorts.quick_sort),
('Heap Sort', Sorts.heap_sort),
('Shell Sort', Sorts.shell_sort),
('Cocktail Sort', Sorts.cocktail_sort),
('Comb Sort', Sorts.comb_sort),
('Bin. Ins. Sort', Sorts.binary_insert_sort)
)
a_sorte = functions.create_sorted()
a_reverse = functions.create_reversed()
a_random = functions.create_randomly()
for i in range(0, 9):
x = copy.deepcopy(a_sorte)
y = copy.deepcopy(a_reverse)
z = copy.deepcopy(a_random)
functions.test_sort(SORTS[i], x, y, z)
Der Fehler erhalte ich:
Traceback (most recent call last):
functions.test_sort(SORTS[i], x, y, z)
f(a_sorte)
TypeError: 'str' object is not callable
Das, was ich in der vorherigen Aufgabe tat, wie in der Frage erwähnt oben:
def create_sorted():
value = []
for i in range(0, SIZE):
n = Number(i)
value.append(copy.deepcopy(n))
return value
def create_reversed():
value = []
for i in range(SIZE, -1, -1):
n = Number(i)
value.append(copy.deepcopy(n))
return value
def create_randomly():
value = []
for i in range(N):
n = Number(random.randint(0, RANGE))
value.append(copy.deepcopy(n))
return value
Nun ja; 'f' ist eine Zeichenfolge und Sie können sie nicht aufrufen. Was genau soll das tun? Wolltest du vielleicht 'f' auf' function_tuple [1] 'setzen? –
Daniel: Ich versuche die eingangs gestellte Frage zu lösen. Ja, ich tue –
Sie übergeben Tupel, der erste Teil ist String, der zweite ist Funktion, also sollten Sie 'f = function_tuple [1]' – sneawo