2016-08-04 3 views
-1

Я написал код для определения скорости движения (мин/км), преобразую его в скорость (км/ч), а затем в зависимости от градиента наклона и от того, вверх или вниз, рассчитывается потерянная скорость (км/ч). Затем отображается новая скорость движения вместе с новым темпом и временем, когда ваш маршрут изменяется.Проблемы с отображением результатов времени в Python

Проблема заключается в том, что я вводил темп, такой как 3:50 (мин/км) с наклоном в гору 1%, новый темп хода составляет 3:60 (мин/км). Как получить скрипт для отметки до 4:00 в этом случае? Также, если введен 3:55 (мин/км), новый темп хода составляет 4: 5 (мин/км), когда он должен читать 4:05 (мин/км). Как это изменить?

Сценарий:

import math 

    print('Q1') 
    SurveyPace = input("Running Pace (min/km): \n "). split(":")      
    SurveyPace = float(SurveyPace[0])*60 + float(SurveyPace[1])          


    Speed = 3600/SurveyPace                   

    print("Original running speed =","%.2f" % round(Speed,2), 'km/hr') 
    print("--------------------------------------------------------") 

    print('Q2') 
    SlopeDirection = int(input('For Uphill press 1 \nFor Downhill press 2 \n '))      

    print("--------------------------------------------------------") 

    print('Q3') 
    SlopeGradient = float(input('Percentage gradient(without the % symbol)?\n '))     

    print("--------------------------------------------------------") 
    print('CALCULATED RESULTS') 
    print("--------------------------------------------------------") 
    if SlopeDirection == 1: 
      Change = - 0.65 * SlopeGradient                 
    if SlopeDirection == 2: 
      Change = + 0.35 * SlopeGradient               
    print ('This route alters your speed by \n', Change,'km/hr') 
    print("--------------------------------------------------------") 

    AdjustedSpeed = Speed + Change                 
    AdjustedPace = 3600/AdjustedSpeed                 
    PaceSecs = round(AdjustedPace % 60) 
    PaceMins = math.floor(AdjustedPace/60) 

    print("New running speed is \n","%.2f" % round(AdjustedSpeed,2), 'km/hr')       
    print("--------------------------------------------------------") 
    print("New running pace is \n", str(PaceMins) + ":" + str(PaceSecs), 'min/km')      
    print("--------------------------------------------------------") 
    print("This route alters your pace by \n", int(PaceSecs + (PaceMins*60)) - SurveyPace, "sec/km") #Prints the time change incured 
    print("--------------------------------------------------------") 

Благодаря

+0

Здесь есть ряд проблем, в том числе, я думаю, в вашей логике - почему «SurveyPace» равно количеству минут, умноженному на 60 * плюс * на количество километров? Это ничего не значит. Кроме того, ознакомьтесь с руководством по стилю Python PEP8; неправильное использование имен переменных смешанного случая. – Jeff

ответ

0

Вы можете сделать это с помощью встроенной функции divmod:

# Round the AdjustedPace to seconds                
AdjustedPace = round(3600/AdjustedSpeed) 

minutes, seconds = divmod(AdjustedPace, 60) 
print(minutes) 
print(seconds) 

Это приведет к:

#Pace = 3:50 
#4 
#0 

#Pace = 3:55 
#4 
#5 
0

Я хотел бы сделать это с помощью timedelta объектов из DateTime:

Если ввести 60 минут, например, даст вам:

> time 
datetime.timedelta(0, 3600) 

И тогда вы можете выполнять математические операции над ней, и она остается правильно:

> time/2 
datetime.timedelta(0, 1800) 

или, если вы хотите минуты просто разделить его на 60, ч делит его на 3600. вы можете также добавить и вычесть timedelta объектов друг от друга, или из объектов даты и времени, если это вам нужны временные метки. Или, если ваш делитель оставляет остаток:

> new = time/17 
> new 
datetime.timedelta(0, 3600) 
> new.seconds 
200 
> new.microseconds 
764706 

Что вы могли бы затем использовать, если хотите. Это хороший способ убедиться, что ваше время всегда остается точным.

Смежные вопросы