6

私は Python の初心者プログラマーで、次の質問の進め方がわかりません。似たような質問が山ほどありますが、 Pythonコードとは関係ありません。

文字列を比較しようとしましたが、比較の仕方がわかりません。最初の 2 つの数字 (時間) を取り、それが 12 より大きい場合は 12 で割る必要があると確信していますが、これには問題があります。

質問:

時間換算 (24 時間から 12 時間)

ユーザーが 24 時間形式を 12 時間形式 ('am'、'pm' を付けて) に変換できるようにする関数を作成します。例: 「1400」から「2:00pm」まで。パラメータとして渡されるすべての文字列の長さは 4 で、数字のみが含まれます。

例 (テスト/呼び出し):

>>> convertTime('0000') 
'12:00am' 
>>> convertTime('1337') 
'1:37pm' 
>>> convertTime('0429') 
'4:29am' 
>>> convertTime('2359') 
'11:59pm' 
>>> convertTime('1111') 
'11:11am'

どんな入力や異なる方法でも素晴らしいでしょう!

4

3 に答える 3

10

datetimeモジュールを使用することもできますが、その場合は日付も処理する必要があります(必要なものをそこに挿入できます)。おそらくそれを単純に解析する方が簡単です。


更新: @JonClementsが元の質問へのコメントで指摘したように、それは1つのライナーで行うことができます。

from datetime import datetime

def convertTime(s):
    print datetime.strptime(s, '%H%M').strftime('%I:%M%p').lower()

次の方法で、入力文字列を時間と分の部分に分割できます。

hours = input[0:2]
minutes = input[2:4]

次に、値を解析して整数を取得します。

hours = int(hours)
minutes = int(minutes)

または、よりPython的な方法でそれを行うには:

hours, minutes = int(input[0:2]), int(input[2:4])

次に、時刻を午前(hours0〜11)にするか午後(12〜23)にするかを決定する必要がありhoursます。また、次の特殊なケースを扱うことを忘れないでhours==0ください。

if hours > 12:
    afternoon = True
    hours -= 12
else:
    afternoon = False
    if hours == 0:
        # Special case
        hours = 12

これで必要なものがすべて揃ったので、残っているのは結果をフォーマットして印刷することです。

print '{hours}:{minutes:02d}{postfix}'.format(
    hours=hours,
    minutes=minutes,
    postfix='pm' if afternoon else 'am'
)

それを関数にまとめ、いくつかのショートカットをとると、次の結果が残ります。

def convertTime(input):
    h, m = int(input[0:2]), int(input[2:4])

    postfix = 'am'

    if h > 12:
        postfix = 'pm'
        h -= 12

    print '{}:{:02d}{}'.format(h or 12, m, postfix)

convertTime('0000') 
convertTime('1337') 
convertTime('0429') 
convertTime('2359') 
convertTime('1111') 

結果:

12:00am
1:37pm
4:29am
11:59pm
11:11am
于 2012-11-25T19:34:33.923 に答える
2

いくつかのヒントint( "2300")は整数2300を返します2300はPMです。時間>=1200はPM時間で、0000から1200はAMです。

文字列を受け取り、それを整数として評価し、それが上記の条件よりも大きいか小さいかをチェックして、出力を返す関数を作成できます。

于 2012-11-25T19:33:33.650 に答える