Неверное измерение времени выполнения программы
При выполнении программы все работает хорошо, кроме вывода времени выполнения - оно всегда равно 0.00... В чем тут проблема?
from tkinter import *
from tkinter import messagebox
import time
# Функция сортировки пузырьком
def bubble_sort(arr):
n = len(arr)
start_time = time.time()
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
end_time = time.time()
return arr, end_time - start_time
# Функция сортировки выбором
def selection_sort(arr):
n = len(arr)
start_time = time.time()
for i in range(n):
min_idx = i
for j in range(i + 1, n):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
end_time = time.time()
return arr, end_time - start_time
# Функция выбора сортировки
def sort_numbers():
global sorted_numbers, time_taken
sequence = entry.get()
try:
numbers = [int(num) for num in sequence.split(",")]
if sorting_var.get() == 1:
sorted_numbers, time_taken = bubble_sort(numbers)
elif sorting_var.get() == 2:
sorted_numbers, time_taken = selection_sort(numbers)
output.config(state=NORMAL)
output.delete(1.0, END)
output.insert(END, f"Sorted Sequence: {', '.join(map(str, sorted_numbers))}\n")
output.insert(END, f"Time taken: {time_taken:.10f} seconds")
output.config(state=DISABLED)
except ValueError:
messagebox.showerror("Error", "Please enter a valid sequence of numbers separated by commas.")
# Создание рабочего окна
root = Tk()
root.title("Number Sorter")
# Создание виджетов меток, ввода, комбинированного окна, кнопки и вывода текста
label = Label(root, text="Enter numbers separated by commas:")
label.pack()
entry = Entry(root)
entry.pack()
sort_options = ["Bubble Sort", "Selection Sort"]
sorting_var = IntVar()
sorting_var.set(1) # стандартное значение
combobox = OptionMenu(root, sorting_var, *range(1, len(sort_options) + 1), *sort_options)
combobox.pack()
start_button = Button(root, text="Start", command=sort_numbers)
start_button.pack()
output = Text(root, height=10, width=50)
output.config(state=DISABLED)
output.pack()
root.mainloop()
Ответы (1 шт):
Добавите после команды start_time = time.time()
команду time.sleep(2)
, вот так
start_time = time.time()
time.sleep(2)
и вы увидите, что все в порядке. Современные компьютеры работает очень, очень быстро. :-)
(Затем, конечно, эту команду удалите.)
Пока речь идет о точности, вы можете требовать какую-либо точность, но точность все равно не зависит от ваших требований — см. часть time — Доступ к времени и преобразования в документации Стандартная библиотека Python:
Точность различных функций реального времени может быть меньше, чем предполагают единицы измерения, в которых выражается их значение или аргумент. Например, в большинстве систем Unix часы «тикают» только 50 или 100 раз в секунду.