大家好,我是编程新手,这是我关于堆栈溢出的第一个问题。
这里我正在编写一个简单的程序,它将给定的秒数分为小时,分钟和秒,但是当我选择插入多于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
答案 0 :(得分:1)
首先,行seconds = []
完全是多余的:您只是创建一个包含空列表的新变量,然后在for循环进入第一个变量后立即覆盖该变量迭代。
其次,我完全不确定表达式range(len(str(s)))
是什么意思:您将秒数(例如10
)转换为字符串"10"
,然后获取该字符串2
的长度,然后迭代范围[0, 1]
。因此,循环变量seconds
在循环的2次迭代期间被赋值0
和1
。
结果计算的结果绝不是你想要实现的。事实上,我不确定为什么你决定使用一个循环将一个整数值转换为一个元组。
为了实现您的目标,您只需要进行基本的数学计算,而不管编程语言如何:
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