Алгоритм пузырьковой сортировки в PrettyTable
Нужно отсортировать фамилии в алфавитном порядке, обязательно методом пузырьковой сортировки.
Код:
from prettytable import PrettyTable, HEADER
def Load():
with open ('Workers.txt', encoding='utf-8') as file:
v = list(file.read().splitlines())
d=int(v[0])
for i in range(len(v)):
if i == 0:
continue
#Фамилии
elif i % 2 == 1:
sd_name = ''
sd_name += v[i]
sd_name += ' '
#Числа
elif i % 2 == 0:
z = v[i]
x = int(z[0] + z[1])
y = float(z[3] + z[4] + z[5] + z[6])
itogo=''
itogo+=str(x*y)
days=''
days+=str(x)
oklad=''
oklad+=str(y)
zrplt = round(((x * y) / d), 2)
summa.append(zrplt)
Save(zrplt, sd_name, days, oklad)
summa=[]
t = PrettyTable()
t.field_names = [" Фамилия", "Дни", " Оклад ", " Зарплата "]
def Save(zrplt,sd_name,days,oklad):
with open('Pay.txt', 'w', encoding='utf-8') as f:
t.add_rows(
[
[sd_name,days,oklad,zrplt]
]
)
t.align[" Фамилия"] = 'l'
t.align["Дни"] = 'r'
t.align[" Оклад "] = 'r'
t.align[" Зарплата "] = 'r'
f.write(str(t))
print(t)
Load()
it=sum(summa)
with open('Pay.txt', 'a', encoding='utf-8') as f:
f.write('\n')
with open('Pay.txt', 'a', encoding='utf-8') as f:
k=PrettyTable()
k.hrules=HEADER
k.vrules=False
k.field_names=['Итого | ', it]
k.align['Итого '] = 'l'
k.align[it] = 'r'
f.write(str(k))
print(k)
Workers: 24 Петров 15 6300 Иванов 24 5600 Сидоров 19 4350 Николаев 15 4800 Малышев 21 4350 Соколов 12 7800
Ответы (1 шт):
Автор решения: greymaster
→ Ссылка
Сортировка пузырьком, и для текста, и для чисел
def p_sort(a):
n = len(a)
for i in range(n - 1):
for j in range(n - 1 - i):
if a[j] > a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
return a
name = [("Петров", 13, 5400), ("Соколов", 12, 6400), ("Александров", 11, 5500), ("Алексеев", 11, 5400),
("Иванов", 15, 5600), ("Петров", 12, 5400), ("Петров", 12, 5300)]
print(p_sort(name))
выводит:
[('Александров', 11, 5500), ('Алексеев', 11, 5400), ('Иванов', 15, 5600), ('Петров', 12, 5300), ('Петров', 12, 5400), ('Петров', 13, 5400), ('Соколов', 12, 6400)]