Python列表和循环

2024-05-12 13:56:51 发布

您现在位置:Python中文网/ 问答频道 /正文

定义一个函数time(x,y),它以小时和分钟为单位,将时间舍入到最接近的5分钟,并将其表示为单词/字符串。你知道吗

例如:

time(7,5) returns "five after seven"
time(7,13) returns "quarter after seven"
time(7,9) returns "ten after seven"
time(7,20) returns "twenty after seven"
time(7,24) returns "twenty five after seven"
time(7,30) returns "half past seven"
time(7,36) returns "twenty five to eight"
time(7,38) returns "twenty to eight"
time(7,45) returns "quarter to eight"
time(7,50) returns "ten to eight"
time(7,56) returns "five to eight"
time(12,00) returns "noon"
time(18,20) returns "twenty after six"
time(23,45) returns "a quarter to midnight"

我编写代码的计划是使用一个数组来表示hours和if语句,并附加minutes。我开始用我的代码,但我有困难使它工作

def time(h):
    words=["midnight","one","two","three","four","five","six","seven","eight","nine","ten","eleven","noon"]
    for n in range(len(words)):
        h = (words[n])
    return h

当我只运行这段代码时,每次都会显示“noon”。我知道我做错了什么,请有人帮我解决这个问题,给我一个正确的方向开始的分钟。你知道吗

谢谢


Tags: to代码timereturnswordsfivesixafter
3条回答

循环for n in range(len(words)):中的逻辑似乎是错误的。您只需循环每个元素并将其分配给h(最后h保留最后一个值,即"noon")。
像这样的事情将是一个好的开始:

def time(h):
    words = [
        "midnight", "one", "two", "three", "four", "five", "six", "seven",
        "eight", "nine", "ten", "eleven", "noon"]
    return words[h]

或者继续使用你的循环(不推荐):

def time(h):
    words = [
        "midnight", "one", "two", "three", "four", "five", "six", "seven",
        "eight", "nine", "ten", "eleven", "noon"]
    ret = None
    for i in range(len(words)):
        if i == h:
            ret = words[i]
    return ret

每次运行for循环时,你都在写h。它将返回正午,因为正午是循环中的最后一个n。你知道吗

我肯定我可能错过了一些边缘案件,但你可以用这个一般的想法。你知道吗

hours = ["midnight","one","two","three","four","five","six","seven","eight","nine","ten","eleven","noon","one","two","three","four","five","six","seven","eight","nine","ten","eleven"]
minutes = ["", "five", "ten", "quarter", "twenty", "twenty five", "half", "twenty five", "twenty", "quarter", "ten", "five"]

def time(h,m):
    if m < 2 or m > 58:
        return str(hours[h])
    elif m <= 30:
        return str(minutes[int(round(float(m)/5))]) +  " past " + str(hours[h])
    else:
        return str([int(round(float(m)/5))]) + " to " + str(hours[h+1])

测试

>>> time(7,5)
'five past seven'

>>> time(7,13)
'quarter past seven'

>>> time(12,15)
'quarter past noon'

>>> time(21,45)
'quarter to ten'

相关问题 更多 >