Python列表和循环

时间:2014-09-19 00:34:59

标签: python list loops

定义一个函数,时间(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"

我对此进行编码的计划是使用数组作为小时和if语句并附加分钟。我开始使用我的代码,但我遇到麻烦使其工作

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

当我只运行此代码时,它会给我“中午”#39;每次。我知道我做错了什么,有人可以帮助我解决这个问题并给我一个正确的方向开始分钟。

由于

3 个答案:

答案 0 :(得分:2)

循环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

答案 1 :(得分:1)

我确信我可能错过了一些边缘案例,但您可以使用这个一般性的想法。

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'

答案 2 :(得分:0)

每次你运行你的for循环时,你都在写作。它会在中午返回,因为中午是循环中的最后一个n。