在python中结合两个函数的结果

时间:2016-07-24 20:29:12

标签: python

我想要达到的目标是取一个字符串,将时间提取为小时和分钟,并将它们作为度数返回到模拟时钟刻度盘上,我能想到的唯一方法是创建2个函数,一个返回小时,另一小时返回分钟。我可能完全以错误的方式解决了这个问题(我是初学者)。我现在需要将两个函数的结果组合为一个字符串。我的代码看起来像这样:

def clock_degree(s):
    hr, min = s.split(':')
    if int(hr) > 12:
        return str((int(hr)-12)*30)
    elif int(hr) == 0:
        return str((int(hr)+12)*30)
    elif int(hr) > 24:
        return "Check your time !"
    elif int(hr) < 0:
        return "Check your time !"
    else:
        return int(hr) * 30

def clock_degree_min(x):
    hour, mn = x.split(':')
    if int(mn) == 60:
        return 360
    elif int(mn) == 0:
        return 360
    elif int(mn) > 60:
        return "Check your time !"
    elif int(mn) < 0:
        return "Check your time !"
    else:
        return int(mn) * 6

我如何能够实现这一目标的任何其他解决方案都是受欢迎的。提前谢谢。

4 个答案:

答案 0 :(得分:1)

如果您在列表中有时间,那么您可以执行以下操作:

currentTimes = [] # Here's a list of times before the functions manipulate each element.

analogDialTimes = [(clock_degree(time), clock_degree_min(time)) for time in currentTimes]

这将返回一个元组列表,类似于摩西所建议的。

答案 1 :(得分:0)

我宁愿避免混合返回类型(这是异常的用途),并使用标准库函数进行常见操作,如解析时间(time.strptime):

import time
s="15:43"
t=time.strptime(s,"%H:%M")
pair = t.tm_hour*360/12, t.tm_min*360/60

如果您想将时针限制为一个转弯,请使用模t.tm_hour%12,并将小时和分钟合并为一个平稳移动的时针(t.tm_hour+t.tm_min/60.0)

最后,关于如何处理该对,你说“将两个函数的结果组合成一个字符串”,但这并没有告诉我你想要它的格式。你能提供一个例子吗?

答案 2 :(得分:0)

def clock_degree(s):
    hr, min = s.split(':')    
    hr = float(hr) + float(min)/60 # convert minutes to hours (ex : 30 min = 0.5h)
    hr = hr % 12 # have a time between 0:00 and 12:00
    angle = (360 / 12) * hr # calculate the angle (6h => 180°)
    print(hr, angle)
    return (hr, angle)

clock_degree('24:00')
clock_degree('12:00')
clock_degree('6:00')
clock_degree('24:30')

输出:

0.0 0.0
0.0 0.0
6.0 180.0
0.5 15.0

答案 3 :(得分:0)

我希望这样的东西更简洁:

def getDegrees(t):
    h, m = [float(n) for n in t.split(":")]
    result = []
    for n, denominator in (h, 12), (m, 60):
        result.append(str((n % denominator) / denominator * 360))
    return ",".join(result)

对于分钟和秒,以最大值开始并使用它来获得模数(例如,22-> 10)然后除以它(6-> 0.5),然后乘以360。