Как установить имя объекта и параметры из пользовательского интерфейса в python - PullRequest
0 голосов
/ 06 января 2020

Я работаю над простым веб-приложением для курсового проекта, которое является базовым c трекером путешествий. Пользователь может ввести дату вылета, пункт назначения, авиакомпанию и дату возвращения. Пользователь будет вводить несколько поездок. Этот интерфейс сохраняется в текстовом файле. В рамках проекта я также должен использовать классы. Выбранный класс - «Поездки», а параметры - пользовательский интерфейс. Затем я построил обратный отсчет, чтобы показать время до или с даты отъезда. Я хочу, чтобы это использовать объект класса и параметр. Я ищу способ автоматизации имени объекта и параметров из пользовательского интерфейса. Ниже приведен код, а в строке 24 показана строка, которую я надеюсь достичь автоматически.

import datetime

#set class
class Trips:
    def __init__(self, destination, dep_date, airline, ret_date):
        self.destination = destination
        self.dep_date = dep_date
        self.airline = airline
        self.ret_date = ret_date

#get trips
def get_trips():
    tripsdb = open("tripsdb.txt")
    content = tripsdb.read()
    tripsdb.close()
    trips = content.split("$$$")
    trips.pop(len(trips)-1)
    return trips

#countdown days to departure using datetime
def countdown():

    trips = get_trips()
    trip1 = Trips(*trips[2].split(",")) #need to automate

    get_date = trip1.dep_date

    depart_date = datetime.datetime.strptime(get_date, "%d.%m.%Y")
    #set todays date
    nowdate = datetime.datetime.now()
    #difference in seconds
    count = int((depart_date-nowdate).total_seconds())
    #divide into days
    days = count/86400
    # set as int to round and string to concatenate, use abs to remove "-"
    if int(days) > 0:
        return(str(int(days)) + " days left to departure")
    elif int(days) == 0:
        return "You depart today!"
    else:
        return (str(abs(int(days))) + " days since your departure") 

print(countdown())

Я перепробовал все виды с циклами и почтовыми индексами, но продолжаю зацикливаться на всевозможных ошибках в зависимости от того, что я пробовал. Я попытался создать массив, используя для l oop на протяжении длины трипов, которые возвращали бы trip_num = [trip0, trip1, trip2], чтобы я мог получить имена переменных.

def get_array():
    array = []
    num = -1
    trips = get_trips()
    for trip in trips:
        num += 1
        array += ["trip " + str(num)]
    return array

trip_num = get_array()

Затем я хотел объединить в основном первый элемент в trip_num с первым элементом в trip , чтобы вернуть что-то вроде trip1 = пункт назначения, dep_date, авиакомпания, ret_date и т. д. для каждого. Видишь, что я имею в виду?

1 Ответ

0 голосов
/ 07 января 2020

Я не знаю, понимаю ли я вашу проблему, но я бы так ее написал.

  • В классе я конвертирую обе даты в datetime объекты.
  • I поместите countdown как метод в классе, а не внешнюю функцию.
  • Я сохраняю все поездки в списке без использования переменных trip1, trip2, et c.

.

# --- classes ---

class Trip:

    def __init__(self, destination, dep_date, airline, ret_date):
        self.destination = destination
        self.airline = airline
        self.dep_date = datetime.datetime.strptime(dep_date, "%d.%m.%Y")
        self.ret_date = datetime.datetime.strptime(ret_date, "%d.%m.%Y")

    def countdown(self):
        nowdate = datetime.datetime.now()

        seconds = (self.dep_date-nowdate).total_seconds()
        days = seconds//86400 # divide and round to integer

        if days > 0:
            return "{} days left to departure".format(days)
        elif days < 0:
            return "{} days since your departure".format(-days) 
        else:
            return "You depart today!"

# --- functions ---

def read_trips():
    tripsdb = open("tripsdb.txt")
    content = tripsdb.read()
    tripsdb.close()

    trips = content.split("$$$")
    trips.pop(-1)
    #trips = content.split("$$$")[:-1] in one line using `slicing`

    # convert to list of objects Trip
    all_trips = []
    for trip in trips:
        all_trips.append( Trip(*trip.split(",")) )

    return all_trips

def write_trips(all_trips):
    pass
    #TODO: write it

# --- main ---

all_trips = read_trips()

for trip in all_trips:
    print('Destination:', trip.destination)
    print('Airline:', trip.airline)
    print('Countdown:', trip.countdown())
    print('---')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...