Пользовательский интерфейс Python. Почему я не могу получить доступ к своей хэш-таблице и объектам внутри нее через эту Python

Программы на Python
Anonymous
Пользовательский интерфейс Python. Почему я не могу получить доступ к своей хэш-таблице и объектам внутри нее через эту

Сообщение Anonymous »

Я создал пользовательский интерфейс, который работает для всех вариантов, кроме этого, с которым у меня возникли проблемы. Эта опция 3 предназначена для распечатки статуса посылки в указанное пользователем время. Самое смешное, что вариант 2 распечатывает все статусы пакетов в заданное время и работает нормально. См. вариант 2 ниже:

Код: Выделить всё

# Option 2
elif option == "2":
# checkTime = input function and use timedelta for correct format
checkTime = input('Please enter a time in the form "00:00:00"')
hour, minute, second = checkTime.split(":")
rtime = datetime.timedelta(hours=int(hour), minutes=int(minute), seconds=int(second))
# For all packages print status at certain time
for i in range(40):
pack = myHash.search(i + 1)
print(pack)
# At Hub
if rtime < pack.timeLeftHub0:
print('At Hub')
elif rtime == pack.time_delivered:
print('Delivered on Truck ' + str(pack.truck))
elif rtime > pack.time_delivered:
print('Delivered on Truck ' + str(pack.truck))
else:
print('En Route on Truck ' + str(pack.truck))
Это работает. Итак, для варианта 3 единственное отличие должно заключаться в следующем, как я думал:
  • У меня также добавлен ввод с именем checkPackage (чтобы пользователь мог сказать, что статус пакета, который они хотят, введя идентификатор пакета)
  • вместо «для i в диапазоне» мне нужно что-то, чтобы связать идентификатор пакета, введенный в checkPackage, с объектом пакета в моей хеш-таблице .
Моя хэш-таблица называется myHash, а идентификаторы пакетов являются ключами. Имейте в виду, что я использовал несколько функций поиска myHash, используя идентификаторы пакетов в других областях кода, и они работают правильно, так что проблема не в этом. И поэтому я не понимаю, почему он не хочет здесь работать. Вот мой код ниже для варианта 3:

Код: Выделить всё

# Option 3
elif option == "3":
checkPackage = input('Please enter a package using its package ID')
checkTime = input('Please enter a time in the form "00:00:00"')
hour, minute, second = checkTime.split(":")
rtime = datetime.timedelta(hours=int(hour), minutes=int(minute), seconds=int(second))
for package_id in checkPackage:
pack = myHash.search(package_id)
if rtime < pack.timeLeftHub0:
pack.status = 'At Hub'
print(str(pack.package_id) + ' package status at ' + str(rtime) + ' = ' + str(pack.status))
elif rtime == pack.time_delivered:
pack.status = 'Delivered'
print(str(pack.package_id) + ' package status at ' + str(rtime) + ' = ' + str(pack.status))
elif rtime > pack.time_delivered:
pack.status = 'Delivered'
print(str(pack.package_id) + ' package status at ' + str(rtime) + ' = ' + str(pack.status))
else:
pack.status = 'En Route'
print(str(pack.package_id) + ' package status at ' + str(rtime) + ' = ' + str(pack.status))
Вот что я получаю:

Код: Выделить всё

Choose an option (1,2,3, or 4): 3
Please enter a package using its package ID14
Please enter a time in the form "00:00:00"10:00:00
Traceback (most recent call last):
File "C:\Users\alecc\PycharmProjects\pythonProject\Main.py", line 431, in 
if rtime < pack.timeLeftHub0:
^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'timeLeftHub0'

Очевидно, что поскольку вариант 2 ДЕЙСТВИТЕЛЬНО работает, ошибка в том, что я не могу заставить вариант 3 прочитать «pack» как объект пакета, представленный входными данными checkPackage (который является идентификатором пакета). Я даже попробовал использовать тот же метод «для i в диапазоне», который использовал в варианте 2, и вместо диапазона поставил checkPackages. Та же ошибка

Подробнее здесь: https://stackoverflow.com/questions/783 ... ugh-this-v

Вернуться в «Python»