Latest updates from Tony
This commit is contained in:
parent
3b63c8213c
commit
b5e001dabc
93 changed files with 2579 additions and 52 deletions
|
@ -0,0 +1,137 @@
|
|||
#PySimple examples (v 3.8)
|
||||
#Tony Crewe
|
||||
#Sep 2018
|
||||
|
||||
import PySimpleGUI as sg
|
||||
|
||||
sg.SetOptions (font =('Calibri',12,'bold'))
|
||||
|
||||
|
||||
#setup column (called column1) of buttons to use in layout
|
||||
|
||||
column1 = [[sg.ReadButton('Original list', size = (13,1))],
|
||||
[sg.ReadButton('Default sort', size = (13,1))],
|
||||
[sg.ReadButton('Sort: selection',size = (13,1))],
|
||||
[sg.ReadButton('Sort: quick', size = (13,1))]]
|
||||
|
||||
layout =[[sg.Text('Search and Sort Demo', font =('Calibri', 20, 'bold'))],
|
||||
[sg.Text('',size = (14, 11),relief=sg.RELIEF_SOLID,font = ('Calibri', 12), background_color = 'White',key = '_display_'), sg.Column(column1)],
|
||||
[sg.Text('_'*32,font = ('Calibri', 12))],
|
||||
[sg.InputText(size = (13,1), key = '_linear_'), sg.Text(' '), sg.InputText(size = (13,1), key = '_binary_')],
|
||||
[sg.ReadButton('Linear Search', size = (13,1)), sg.Text(' '), sg.ReadButton('Binary Search', size = (13,1))],
|
||||
]
|
||||
|
||||
window = sg.Window('Search and Sort Demo').Layout(layout)
|
||||
|
||||
#names for Demo, could be loaded from a file
|
||||
names= ['Roberta', 'Kylie', 'Jenny', 'Helen',
|
||||
'Andrea', 'Meredith','Deborah','Pauline',
|
||||
'Belinda', 'Wendy']
|
||||
|
||||
#function to display list
|
||||
def display_list(list):
|
||||
#store list in Multiline text globally
|
||||
global list_displayed
|
||||
list_displayed = list
|
||||
display = ''
|
||||
#add list elements with new line
|
||||
for l in list:
|
||||
display = display + l + '\n'
|
||||
window.FindElement('_display_').Update(display)
|
||||
|
||||
#use inbuilt python sort
|
||||
def default(names):
|
||||
l = names[:]
|
||||
l.sort()
|
||||
display_list(l)
|
||||
|
||||
#Selection sort - See Janson Ch 7
|
||||
def sel_sort(names):
|
||||
l = names[:]
|
||||
for i in range(len(l)):
|
||||
smallest = i
|
||||
for j in range(i+1, len(l)):
|
||||
#find smallest value
|
||||
if l[j] < l[smallest]:
|
||||
#swap it to front
|
||||
smallest = j
|
||||
#repeat from next position
|
||||
l[smallest], l[i] = l[i], l[smallest]
|
||||
display_list(l)
|
||||
|
||||
#Quick sort - See Janson Ch 7
|
||||
def qsort_holder(names):
|
||||
l = names[:]
|
||||
#pass List, first and last
|
||||
quick_sort(l, 0, len(l) -1)
|
||||
display_list(l)
|
||||
#Quicksort is a partition sort
|
||||
def quick_sort(l, first, last):
|
||||
if first >= last:
|
||||
return l
|
||||
pivot = l[first]
|
||||
low = first
|
||||
high = last
|
||||
while low < high:
|
||||
while l[high] > pivot:
|
||||
high = high -1
|
||||
while l[low] < pivot:
|
||||
low = low + 1
|
||||
if low <= high:
|
||||
l[high], l[low] = l[low], l[high]
|
||||
low = low + 1
|
||||
high = high -1
|
||||
#continue splitting - sort small list
|
||||
quick_sort(l, first, low -1)
|
||||
quick_sort(l, low, last)
|
||||
|
||||
#Linear Search - no need for Ordered list
|
||||
def linear_search():
|
||||
l = names[:]
|
||||
found = False
|
||||
for l in l:
|
||||
if l == value['_linear_']:
|
||||
found = True
|
||||
window.FindElement('_display_').Update('Linear search\n' + l + ' found.')
|
||||
break
|
||||
if not found:
|
||||
window.FindElement('_display_').Update(value['_linear_'] + ' was \nNot found')
|
||||
|
||||
#Binary Search - only works for ordered lists
|
||||
def binary_search():
|
||||
l= list_displayed[:]
|
||||
lo = 0
|
||||
hi = len(l)-1
|
||||
found = False
|
||||
while lo <= hi:
|
||||
mid = (lo + hi) //2
|
||||
if l[mid] == value['_binary_']:
|
||||
window.FindElement('_display_').Update('Binary search\n' + l[mid] + ' found.')
|
||||
found = True
|
||||
break
|
||||
elif l[mid] < value['_binary_']:
|
||||
lo = mid + 1
|
||||
else:
|
||||
hi = mid - 1
|
||||
if not found:
|
||||
window.FindElement('_display_').Update(value['_binary_'] + ' was \nNot found')
|
||||
|
||||
|
||||
while True:
|
||||
button, value = window.Read()
|
||||
if button is not None:
|
||||
if button == 'Original list':
|
||||
display_list(names)
|
||||
if button == 'Default sort':
|
||||
default(names)
|
||||
if button == 'Sort: selection':
|
||||
sel_sort(names)
|
||||
if button == 'Sort: quick':
|
||||
qsort_holder(names)
|
||||
if button == 'Linear Search':
|
||||
linear_search()
|
||||
if button == 'Binary Search':
|
||||
binary_search()
|
||||
else:
|
||||
break
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue