2

時間用、分用、秒用の 3 つのリストがあります。私が行ったことは、入力として 3 つのリストを受け取り、合計時間を計算する関数を作成することです。

私の問題は、関数が非常に冗長であり、あなたへの私の質問は簡単です:これを行うためのより良い方法は何ですか.

これが私の機能です:

def final_time(hours,minutes,seconds):
    draft_hours = sum(hours)
    draft_minutes = sum(minutes)
    draft_seconds = sum(seconds)
    adding_seconds = str(draft_seconds/60.0)
    second_converting = adding_seconds.split(".")
    seconds_to_minutes = int(second_converting[0])
    seconds_to_seconds = draft_seconds - (seconds_to_minutes * 60)
    total_seconds = str(seconds_to_seconds)
    more_minutes = draft_minutes + seconds_to_minutes
    adding_minutes = str(more_minutes/60.0)
    minute_converting = adding_minutes.split(".")
    minutes_to_hours = int(minute_converting[0])
    minutes_to_minutes = more_minutes - (minutes_to_hours * 60)
    total_minutes = str(minutes_to_minutes)
    total_hours = str(draft_hours + minutes_to_hours)
    return total_hours + " hours, " + total_minutes + " minutes, and " + total_seconds + " seconds."

以下に例を示します。

my_hours = [5, 17, 4, 8]
my_minutes = [40, 51, 5, 24]
my_seconds = [55, 31, 20, 33]
print final_time(my_hours,my_minutes,my_seconds)

上記のリターン:

36 hours, 2 minutes, and 19 seconds.

それは機能しますが、ご覧のとおり、関数はpythonicでも効率的な関数でもありません...より良い方法は何でしょうか?

4

4 に答える 4

6
s = sum(hours)*3600+sum(minutes)*60+sum(seconds)
return '%d hours %d minutes %d seconds'%( s/3600, (s%3600)/60, s%60)
于 2013-04-29T17:07:26.110 に答える
4

私はおそらく最初にすべてを秒に変換します:

seconds = sum(3600*h + 60*m + s for (h,m,s) in zip(hours,minutes,seconds)

今それを分解してください:

n_hours,minutes = divmod(seconds,3600)
n_minutes,n_seconds = divmod(minutes,60)
于 2013-04-29T17:07:30.650 に答える
3
def HMSToSeconds(H,M,S):
   return H*3600 + M * 60 + S

def SecondsToHMS(seconds):
   hours,seconds = divmod(seconds,3600)
   mins,seconds = divmod(seconds,60)
   return hours,mins,seconds

def final_time(hours,minutes,seconds):
    draft_hours = sum(hours)
    draft_minutes = sum(minutes)
    draft_seconds = sum(seconds)
    total_seconds = HMSToSeconds(draft_hours,draft_minutes,draft_seconds)
    return SecondsToHMS(total_seconds)
于 2013-04-29T17:06:49.410 に答える
0

Datetime http://docs.python.org/2/library/datetime.html#time-objectsの時間オブジェクトを使用します

それは次のようになります:

def final_time(hours,minutes,seconds):
    times=[datetime.time(hours[i],minutes[i],seconds[i]) for i in range(0,length(hours))]
    return sum(times)
于 2013-04-29T17:09:20.633 に答える