2017-04-04 159 views
0

我已經編寫了包含字符串和整數信息的程序,該程序包含參與者在鐵人三項中的字符串和整數信息。有些列表包含了參與者的賽道時間,以秒爲單位。我需要以某種方式將這些時間轉換爲分鐘,並將它們輸出爲小數點後兩位的浮點數。將所有整數列表轉換爲浮點數以便輸出的函數

How many participants would you like to display?: 3 

Name: Jeff Adrian 
Division: M4044 
Event: Standard Triathlon 
Gender: Male 
Swim: 2026 minutes 
Transition 1: 329 minutes 
Bike: 4625 minutes 
Transition 2: 35 minutes 
Run: 3847 minutes 
Total: 10862.0 

我不會張貼空間的原因完整名單,但下面你可以找到我目前停留在我用來顯示參與者信息的循環和功能:

for i in range(numToDisplay): 
    ttl += float(swimTimes[i] + transition1Times[i] + cycleTimes[i] + transition2Times[i] + runTimes[i]) 

    print("\n Name: " + str(firstName[i]), str(lastName [i]), "\n", "Division: " + str(division[i])) 

    if event[i] is 1: 
     print(" Event: Standard Triathlon") 
    else: 
     print(" Event: Sprint Triathlon") 

    if gender[i] is 1: 
     print(" Gender: Male") 
    else: 
     print(" Gender: Female") 

    print(" Swim: " + str(swimTimes[i]), "minutes", "\n", "Transition 1: " + str(transition1Times[i]), "minutes", "\n", 
     "Bike: " + str(cycleTimes[i]), "minutes", "\n", "Transition 2: " + str(transition2Times[i]), "minutes", "\n", "Run: " + str(runTimes[i]), "minutes", "\n", 
     "Total: " + str(ttl), "\n") 

而且功能來跟蹤那些時代轉變爲分鐘:

def secToMin(s): 
    s = 60 
    minutes = list[i]/s 
    float(minutes) 
    return minutes 

,如果需要,我可以很高興地提供關於該計劃的更多信息。

+1

請正確格式化您的代碼。 – Julien

+1

嘗試這樣的事情。打印(「%。2f mins」%(秒/ 60.0)) – Shiping

+3

對我來說不清楚發生了什麼事情。大部分代碼似乎與問題無關。那是什麼傳遞給'secToMin'?秒?在python 3中,你所要做的只是's/60',而且你有一分鐘​​的時間。如果你有70秒的時間,你想要1.16分鐘(舍入),1.17(舍入)還是傳統的1:10(分鐘:秒)? – tdelaney

回答

0

這聽起來像你需要這樣的功能:

def secToMin(seconds): 
    _seconds = seconds 
    #I wasn't sure if you were storing as string or integer 
    if type(_seconds) is str: 
     _seconds = int(_seconds) 
    secondsRemaining = _seconds%60 
    minutes = _seconds/60 
    return "%0.02d minute(s), %0.02d second(s)" %(minutes,secondsRemaining) 

然後,如果你有時間的數組,你可以將它們全部一次性使用的「地圖」將它們存儲到一個單獨的數組功能:

timesArray = [1000,1500,500,"1400","900"] 
newArray = map(secToMin,timesArray) 

或者,如果你有一大堆的參與者,可以遍歷它們並生成一個一個:

Alice = ["Alice",1400] 
Bob = ["Bob", 1300] 

participants = [Alice, Bob] 

for participant in participants: 
    print secToMin(participant[1]) 

注意:該函數返回一個上面的字符串,因爲在處理字符串時需要格式化諸如小數位數等內容。你可以很方便地返回花車爲好,如果你需要他們後來返回一個數組,而不是(但你需要簡單地說明這一點,當你處理從函數返回的輸出):

def secToMin(seconds): 
    _seconds = seconds 
    if type(_seconds) is str: 
     _seconds = int(_seconds) 
    secondsRemaining = _seconds%60 
    minutes = _seconds/60 
    return ["%0.02d minute(s), %0.02d second(s)" %(minutes,secondsRemaining),float(minutes),float(secondsRemaining)] 

希望這是你正在尋找的!

+0

你的第一個函數是使用float轉換說明符('f')來轉換整數---'%0.02f'應該是'%02d'分鐘和秒。你的第二個函數返回一個包含一個字符串和兩個浮點數的列表 - 它應該返回一個包含兩個浮點數的元組(它可以很容易地解開:'min,sec = secToMin(whatever)')。 –

+0

謝謝,凱文。好的漁獲%f(這是一個錯字)。關於元組解開包裝你是對的,但是我在寫它的時候,OP很希望直接獲得函數的字符串。不過很好的建議! – kal