-2

大家好,我对编程很陌生,这是我关于堆栈溢出的第一个问题。

在这里,我正在编写一个简单的程序,它将给定的秒数划分为小时、分钟和秒,但是当我选择插入超过 1 个值时,我似乎无法按需要循环它。

这是我的代码,任何帮助将不胜感激。

def hms(s):
    seconds=[]
    for seconds in range(len(str(s))):
        h=seconds/3600
        m=(seconds - h*3600)/60
        s=seconds-(h*3600+m*60)

    return h, m, s
seconds = hms(10)
print seconds
4

1 回答 1

1

首先,这行seconds = []代码完全是多余的:您只是创建了一个包含空列表的新变量,然后在 for 循环进入第一次迭代后立即覆盖该变量。

其次,我完全不确定该表达式range(len(str(s)))的含义:您将秒数(例如10)转换为 string "10",然后获取该字符串的长度,2然后遍历 range [0, 1]。因此,循环变量在循环的 2 次迭代中被seconds赋值。01

结果计算的结果绝不是您要达到的目标。事实上,我不确定你为什么决定使用循环将单个整数值转换为单个元组。

为了实现你想要的,你只需要做一个基本的数学计算,不管编程语言是什么:

def hms(s):
    h = s / 3600
    s -= h * 3600
    m = s / 60
    s -= m * 60
    return (h, m, s)

print hms(10000)  # => (2, 46, 40)
print hms(1000)  # => (0, 16, 40)

如果您需要处理这些值的列表,只需定义另一个函数,但不要使基本逻辑复杂化:

def hms_list(amounts):
    ret = []
    for amount in amounts:
        ret.append(hms(amount))
    return ret

print hms_list([1000, 10000])  # => [(0, 16, 40), (2, 46, 40)]

后者也可以使用列表推导式简化为更紧凑的形式:

def hms_list(amounts):
    return [hms(amount) for amount in amounts]

注意:在 Python 3.x 上,/运算符会给你一个float结果,而不是一个向下的整数,所以为了让上面的算法在那里工作,你需要使用整数除法运算符//,它至少在 Python 2.7 上也能工作,例如:

h = s // 3600
于 2013-10-09T18:48:46.213 回答