TypeError: '>' not supported between instances of 'int' and 'NoneType'
Написал код на python для сортировки спутников планет по нескольким критериям через tkinter, но программа не сортирует один из критериев, а именно "Период обращения в днях", присваивая одному элементу тип None. Не могу разобраться, как исправить данную проблему.
from tkinter import*
sput1 = {"Название": "Луна",
"Название планеты-хозяина": "Земля",
"Год открытия": 1969,
"Диаметр в км": 3474,
"Период обращения в днях": 27}
sput2 = {"Название": "Деймос",
"Название планеты-хозяина": "Марс",
"Год открытия": 1877,
"Диаметр в км": 807,
"Период обращения в днях": 1}
sput3 = {"Название": "Ио",
"Название планеты-хозяина": "Юпитер",
"Год открытия": 1610,
"Диаметр в км": 3642,
'Период обращения в днях': 15}
sput4 = {"Название": 'Титан',
"Название планеты-хозяина": "Сатурн",
"Год открытия": 1655,
"Диаметр в км": 5152,
"Период обращения в днях": 16}
sput5 = {"Название": "Оберон",
"Название планеты-хозяина": "Уран",
"Год открытия": 1787,
"Диаметр в км": 1522,
"Период обращения в днях": 10}
list2 = (sput1, sput2, sput3, sput4, sput5)
def exit_programm():
root.destroy()
def insertion_sort(num):
global index
w = num.widget
index = int(w.curselection()[0])
def Clear():
text.delete('1.0', END)
def method_name(item_to_insert):
assert isinstance(item_to_insert, object)
def Num(planet):
global list_for_sort
list_for_sort = []
Clear()
for k in range(len(list2)):
list_for_sort.append(list2[k].get(planet))
i=0
for i in range(1, len(list_for_sort)):
item_to_insert = list_for_sort[i]
j=i-1
method_name(item_to_insert)
while j>=0 and list_for_sort[j] > item_to_insert:
list_for_sort[j+1]=list_for_sort[j]
j -= 1
list_for_sort[j+1] = item_to_insert
print(list_for_sort)
list_for_sort.reverse()
i = 0
l = i
c = len(list2)
while True:
if list_for_sort[i] == list2[l].get(planet):
text.insert(1.0, 'Спутник № ' + str(c) + '\n')
for key in list2[l]:
text.insert(2.0, str(key) + ' -> ' + str(list2[l][key]) + '\n')
text.insert(1.0, '\n')
c -= 1
l = 0
list_for_sort.pop(i)
else:
l += 1
if len(list_for_sort) == 0:
break
def set_index():
try:
if index == 1:
Num('Название планеты-хозяина')
elif index == 2:
Num('Год открытия')
elif index == 3:
Num('Диаметр в км')
elif index == 4:
Num('Период обращения в днях')
elif index == 0:
Num('Название')
except NameError:
Clear()
text.insert(1.0, 'Сначала выберите, что сортировать')
root = Tk()
root.title('Сортировка')
root.configure(background='gainsboro')
listbox1 = Listbox(root, font='Times 16', height=5, width=20, selectmode=SINGLE)
listbox1.grid(row=0, column=0)
list1 = [u"Название", u"Название планеты-хозяина",
u"Год открытия", u"Диаметр в км", u"Период обращения в днях"]
for i in list1:
listbox1.insert(END, i)
listbox1.bind('<<ListboxSelect>>', insertion_sort)
text = Text(root, font='Times 16', height=15, width=40)
text.grid(row=0, column=1)
i = 0
c = len(list2)
while i < len(list2):
text.insert(1.0, 'Спутник № ' + str(c) + '\n')
for key in list2[i]:
text.insert(2.0, str(key) + ' -> ' + str(list2[i][key]) + '\n')
i += 1
text.insert(1.0, '\n')
c -= 1
bt1 = Button(root, text='Отсортировать\n вставками', fg='white', command=set_index,
background='green', font=("Comic Sans MS", 15, 'bold'), width=20)
bt1.grid(row=3, column=0)
bt3 = Button(root, text='Выход', fg='white', command=exit_programm,
background='red', font=("Comic Sans MS", 15, 'bold'), width=20)
bt3.grid(row=3, column=1)
Ответы (1 шт):
Автор решения: Danis
→ Ссылка
у вас в sput5 в Период обращения в днях после буквы в стоит лишний пробел. поэтому метод get возвращает None
вот как должен выглядить sput5:
sput5 = {"Название": "Оберон",
"Название планеты-хозяина": "Уран",
"Год открытия": 1787,
"Диаметр в км": 1522,
"Период обращения в днях": 10}
