0

这是家庭作业。我有一个函数需要接收 5 或 6 位整数 "setStart(clock)" 。我需要验证整数是否与有效时间的值相对应。实际作业状态: 参数 1:“时钟”是一个 5 位或 6 位整数,格式为 HMMSS 或 HHMMSS,其中 H 是一天中午夜过去的 1 位或 2 位小时,MM 是 2 位小时后的分钟,SS 是分钟后的 2 位数秒。强制的。未经验证到达。示例:104200 表示上午 10:42:00;150910 代表下午 3:09:10

我尝试转换为字符串并检查工作正常的长度,除非输入的整数具有前导零,例如 000130(应该是有效的),但长度仅为 3。我尝试了一些 datetime.datetime 函数和时间。功能,但那些需要完整的时间值,而不仅仅是 HH MM SS。

有人请让我知道我错过了什么!

请注意时钟是整数而不是字符串

我试过:

def setStart(self, clock):
    # Verify Clock is an integer
    if type(clock)!= int:
        raise ValueError("stadiumJumpScore.setStart:  Start time must be an integer") 
    # Verify Length of clock and Valid HH MM SS values

    #attempt 1
    # Failed with leading Zeros
    '''
    test = str(clock)
    testa = test[-2:]
    print testa
    testb = test[-4:-2]
    print testb
    print "NEXT ITERATION"
    '''
    # removed OTHER FAILED ATTEMPTS, KEPT LAST ONE because it is the "workflow" I need
    # attempt 12
    #failed with leading Zeros
    '''
    if clock.__str__().__len__() == 5:
        HH = str(clock)[0:1]
        MM = str(clock)[1:3]
        SS = str(clock)[3:5]            
    elif clock.__str__().__len__() == 6:
        HH = str(clock)[0:2]
        MM = str(clock)[2:4]
        SS = str(clock)[4:6]
    else:
        raise ValueError("stadiumJumpScore.setStart:  Check Length of start time")
    # Use Values from above converted back to int for calculation
    intHH = int(HH)
    intMM = int(MM)
    intSS = int(SS)

    if intHH > 23 or intHH < 0:
        raise ValueError("stadiumJumpScore.setStart:  Hour is invalid or out of range")
    if intMM > 59 or intMM < 0:
        raise ValueError("stadiumJumpScore.setStart:  Minute is invalid or out of range")
    if intSS > 59 or intSS < 0:
        raise ValueError("stadiumJumpScore.setStart:  Seconds is invalid or out of range")

    seconds = intHH*60*60+intMM*60+intSS
    return seconds
    '''
4

1 回答 1

1

好吧,如果它在你的任务范围内,你应该让datetime你为你做繁重的工作。

try:
    datetime.strptime(clock,'%H%M%S')
except ValueError as e:
    #raise whatever exception you want here, or reraise

请注意,您不需要“全职价值”来执行此操作。任何有效的格式字符串都可以使用。

于 2013-10-24T05:42:37.047 回答