2016-08-04 65 views
-1

我已經編寫了一個代碼以獲取跑步速度值(min/km),將其轉換爲速度(km/hr),然後根據坡度和坡度以及行駛方向是上坡還是下坡計算失速(公里/小時)。新的跑步速度隨着新的跑步速度和你的路線被改變的時間顯示出來。在Python中顯示時間結果的問題

問題是當我輸入3:50(min/km)的速度,上坡坡度爲1%,新跑步速度爲3:60(min/km)時。在這種情況下,如何讓腳本跳到4點?此外,如果輸入3:55(分鐘/公里),則當以4:05(分鐘/公里)讀取時,新的跑步速度爲4:5(分鐘/公里)。我如何編輯這個?

的腳本是:

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的對象,這從日期時間:如果您輸入60分鐘

,例如,會給你:

> time 
datetime.timedelta(0, 3600) 

然後你就可以在其上執行數學運算和它保持正確:

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

或者,如果你想分鐘就好除以60吧,小時3600除以它,你也可以添加和相互減去timedelta對象,或者datetime對象,如果你想要時間戳。或者如果您的除數剩餘:

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

然後您可以使用它來如果您想要的。這是確保您的時間始終保持準確的好方法。