1

私はこのような期間を持っています:

(1, 2, 3, 11)

日/時/分/秒の形式です。次のようなものを表示するにはどうすればよいですか: 1 days, 2 hours and 3 minutes. 私は秒を必要としません。したがって、期間が次の場合:

(0, 2, 3, 1)

のように表示されるはず2 hours and 3 minutesです。期間が次の場合:

(0, 0, 3, 11)

次のように表示する必要があります3 minutes.

どうすればそれを達成できますか?ありがとう

4

2 に答える 2

3

これは、Python 2.6 および英語の単数形/複数形の編集された回答です。

def f(x):
    parts = ['%d %s%s' % (a, p, ('', 's')[a > 1]) for a,p in zip(x, ('day', 'hour', 'minute')) if a]
    return ' and '.join(c for c in [', '.join(parts[:-1]), parts[-1]] if c)

テスト:

>>> print f((1, 2, 3, 11))
1 day, 2 hours and 3 minutes

>>> print f((0, 2, 3, 1))
2 hours and 3 minutes

>>> print f((0, 0, 3, 11))
3 minutes
于 2013-01-11T12:51:05.887 に答える
1

あなたはこれをどのくらいするつもりですか?

それがたくさんあり、何度も繰り返される場合は、それを行う関数を書くことができます。

def days(t):
    oxford_comma = False
    a = [" day", " hour", " minute"]
    s = []
    if len(t) != 4:
        return "incorrect format"
    else:
        for i in range(3):
            if t[i] != 0:
                plural = "s" if t[i] > 1 else ""
                s.append(str(t[i]) + a[i] + plural + ", ")


        if len(s) > 1:
            if not oxford_comma:
                s[-2] = s[-2].replace(",","")
            s.insert(len(s)-1,"and ")
        return "".join(s)[:-2]


    print days((1,2,3,11))      #1 day, 2 hours, and 3 minutes
    print days((0,2,3,1))       #2 hours, and 3 minutes
    print days((0,0,3,11))      #3 minutes
    print days((1,1,1,11))      #1 day, 1 hour, and 1 minute

oxford_comma必要に応じて変更してください。

複数形も考慮します。

申し訳ありませんが、少し面倒です - それは間違いなく片付けられる可能性があります - 急いでいました!

于 2013-01-11T12:48:56.640 に答える