2013-10-09 171 views
-2

大家好我是編程的新手,這是我第一個關於堆棧溢出的問題。For循環故障排除

這裏我正在寫一個簡單的程序,它將給定的秒數分爲幾小時,幾分鐘和幾秒,但當我選擇插入多於一個值時,我似乎無法按需要循環它。

這是我的代碼,任何幫助將不勝感激。

def hms(s): 
    seconds=[] 
    for seconds in range(len(str(s))): 
     h=seconds/3600 
     m=(seconds - h*3600)/60 
     s=seconds-(h*3600+m*60) 

    return h, m, s 
seconds = hms(10) 
print seconds 
+1

的人會知道,這是學校裏的功課,相信我。也許最好不要明確提到這一點。 – JensG

+0

我不打算複製任何東西,我只是想了解我在哪裏搞亂了...... – Morgormir

+2

我得到的感覺是你試圖通過儘可能少的工作獲得,而不是花時間和嘗試瞭解你在做什麼:http://learnpythonthehardway.org –

回答

1

首先,行seconds = []是完全多餘:你只是創建一個包含一個空的列表中的新變量,你然後立即儘快覆蓋該變量作爲for循環進入第一迭代。

其次,我一點兒也不知道什麼表達range(len(str(s)))意在表示:你的秒(例如10)的數量轉換成字符串"10",然後以該字符串2的長度,然後迭代超出範圍[0, 1]。循環變量seconds因此在循環的2次迭代期間被分配值01

因此得出的計算結果絕不是你要達到的。事實上,我不知道爲什麼你決定使用循環來將單個整數值轉換爲單個元組。

爲了達到你想要什麼,你只是需要做一個基本的數學運算不管編程語言:

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 
+0

因爲要求可以將一個列表插入函數並返回一個輸出。 至於: 範圍(len(str(s))) 我想要函數遍歷從函數中插入的第0個數字開始的長度l: def hms() – Morgormir

+0

噢好吧我看到現在!太感謝了! – Morgormir