首先,行seconds = []
是完全多餘:你只是創建一個包含一個空的列表中的新變量,你然後立即儘快覆蓋該變量作爲for循環進入第一迭代。
其次,我一點兒也不知道什麼表達range(len(str(s)))
意在表示:你的秒(例如10
)的數量轉換成字符串"10"
,然後以該字符串2
的長度,然後迭代超出範圍[0, 1]
。循環變量seconds
因此在循環的2次迭代期間被分配值0
和1
。
因此得出的計算結果絕不是你要達到的。事實上,我不知道爲什麼你決定使用循環來將單個整數值轉換爲單個元組。
爲了達到你想要什麼,你只是需要做一個基本的數學運算不管編程語言:
def hms(s):
h = s/3600
s -= h * 3600
m = s/60
s -= m * 60
return (h, m, s)
print hms(10000) # => (2, 46, 40)
print hms(1000) # => (0, 16, 40)
如果需要這些值的列表上工作,簡單地定義另一個函數但不要的基本邏輯複雜化:
:
def hms_list(amounts):
ret = []
for amount in amounts:
ret.append(hms(amount))
return ret
print hms_list([1000, 10000]) # => [(0, 16, 40), (2, 46, 40)]
後者也可以使用列表解析減小到更緊湊的形式
注: Python的3.x中,該/
操作會給你一個float
結果,而不是一個地板下整,所以爲了對上述算法在那裏工作,你需要使用整數除法運算符//
這也將工作至少Python 2.7版,如:
h = s // 3600
的人會知道,這是學校裏的功課,相信我。也許最好不要明確提到這一點。 – JensG
我不打算複製任何東西,我只是想了解我在哪裏搞亂了...... – Morgormir
我得到的感覺是你試圖通過儘可能少的工作獲得,而不是花時間和嘗試瞭解你在做什麼:http://learnpythonthehardway.org –