Loop делает странные вещи с данными - PullRequest
0 голосов
/ 31 мая 2018

Хорошо, я работаю над этой проблемой около 8 часов и просто не могу понять, что происходит.Итак, приложение, которое я создаю, - это менеджер TimeSheet, который использует приложение для Android;настольное приложение, которое я делаю на python;и база данных MySQL.Настольное приложение в основном использует запросы к базе данных.Таким образом, текущий запрос предназначен для пользователя, чтобы проверить количество часов, которое сотрудник провел между двумя датами:

query = "SELECT FirstName, LastName, StartTime, FinishTime FROM Sheets WHERE DateTesting >= '"+StartDate+"' AND DateTesting <= '"+EndDate+"';"

И затем приложение python отображает результаты, используя дату и время начала и окончания.время и отработать количество часов, отработанных работником.Это работает нормально.

        tdelta = datetime.datetime.strptime(s2, FMT) - datetime.datetime.strptime(s1, FMT)
        tdelta=(str(tdelta))
        totalDelta.append(tdelta)

        self.labels.append(Label(myframe,text=f'Name: {a} {b} | Start Time: {c} | Finish Time: {d} | Hours Done: {tdelta}'))
        self.labels[q].grid(column=0, row=+r)

К вашему сведению, он использует цикл для просмотра информации.Следующая часть (с которой у меня возникла проблема) состоит в том, чтобы подсчитать общее количество часов, которое КАЖДЫЙ сотрудник провел, но мой цикл ужасен, и я просто нахожусь в тупике.

    for u in secondNameList:
        totalHoursPerPerson = 0
        totalMinutesPerPerson = 0    
        for item in nameList:
            if item == u:
                timeParts = [int(s) for s in tdelta.split(':')]
                totalMinutesPerPerson += timeParts[1]
                totalHoursPerPerson += timeParts[0] 
                totalHoursPerPerson += totalMinutes // 60
                minutesToTake = totalMinutes // 60
                minutesToSub = minutesToTake * 60
                totalMinutesPerPerson = totalMinutes - minutesToSub
                print(totalHoursPerPerson)
                totalsPerPerson.append(f'{item} did a total of {totalHoursPerPerson} Hours')
                print(f'{item} did a total of {totalHoursPerPerson} Hours')

    totalsPerPerson = list(set(totalsPerPerson))
    print(totalsPerPerson)

Вывод, как показано ниже:

4
['Chris', 'Chris', 'Rory', 'John']
['Chris', 'Chris', 'Rory', 'John']
(('Chris', 'Gracey', '07:00', '16:30'), ('Chris', 'Gracey', '07:00', '16:30'), ('Rory', 'Gracey', '07:00', '16:30'), ('John', 'Smith', '07:00', '16:30'))
9
Chris did a total of 9 Hours
18
Chris did a total of 18 Hours
9
Chris did a total of 9 Hours
18
Chris did a total of 18 Hours
9
Rory did a total of 9 Hours
9
John did a total of 9 Hours
['John did a total of 9 Hours', 'Chris did a total of 18 Hours', 'Rory did a total of 9 Hours', 'Chris did a total of 9 Hours']

Я действительно не уверен, почему он отображает Криса дважды.Я также попытался удалить дубликаты, но это только сломало его.

Если есть лучший способ сделать это, я все уши.

Спасибо

1 Ответ

0 голосов
/ 31 мая 2018

Хорошо, поэтому я изменил вместо этого оператор sql.

Это утверждение, которое я использовал:

SELECT FirstName, LastName, SEC_TO_TIME(SUM(TIME_TO_SEC(FinishTime) - TIME_TO_SEC(StartTime))) AS timediff FROM Sheets WHERE DateTesting >= '2018/5/7' AND DateTesting <= '2018/5/18' GROUP BY FirstName, LastName;

Конечно, с переменными, установленными в python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...