我正在尝试使用以下代码将十进制度转换为度,分和秒:
def dd2dms(deg):
d = int(deg)
md = abs(deg - d) * 60
m = int(md)
sd = (md - m) * 60
return [d, m, sd]
full = 500/60
print(full)
print(dd2dms(full))
但我得到以下输出:
8.333333333333334 [8, 20, 0]
我希望输出为:
8.333333333333334 8:20:0
我怎样才能做到这一点?我正在学习Python的步骤。 :)
答案 0 :(得分:1)
如果它仅用于显示目的,例如:
print("{0}:{1}:{2}".format(*dd2dms(full)))
答案 1 :(得分:1)
这是一个围绕你的角度构建的小类,它有一个dms的转换函数,还有一个格式很好的字符串表示法:
class Angle(float):
def __init__(self, degrees):
self.degrees = degrees
def __repr__(self):
return "<Angle of {}° ({})>".format(self.degrees, self.dms)
@property
def dms(self):
deg = self.degrees
d = int(deg)
md = abs(deg - d) * 60
m = int(md)
sd = (md - m) * 60
return "{:g}:{:g}:{:g}".format(d, m, sd)
演示:
In[1]: a = Angle(90.173)
In[2]: print(a)
90.173
In[3]: print(a.dms)
90:10:22.8
In[4]: a
Out[4]: <Angle of 90.173° (90:10:22.8)>
由于它继承自float,你甚至可以用它来计算。请注意,返回值将是普通浮点数(不是Angle
)而无需进一步调整类。
答案 2 :(得分:0)
如果dd2dms
返回一个数组,你只需要提取数组元素,将它们转换为字符串然后连接。如果您刚刚开始学习Python,请尝试这样简单的事情:
result = dd2dms(full)
print(str(result[0]) + ":" + str(result[1]) + ":" + str(result[2]))
其中result[i]
返回数组i
的{{1}} - 元素,result
从其参数构造一个字符串,然后您可以将字符串与{{连接起来1}}。
答案 3 :(得分:0)
从return语句中删除方括号(返回一个元组而不是列表):
return d, m, sd
并格式化输出字符串:
"%s:%s:%s" % dd2dms(full)
完整摘录:
def dd2dms(deg):
d = int(deg)
md = abs(deg - d) * 60
m = int(md)
sd = (md - m) * 60
return d, m, sd
full = 500/60
print(full)
print("%s:%s:%s" % dd2dms(full))
答案 4 :(得分:0)
在python 3.6中,您可以使用文字字符串插值https://www.python.org/dev/peps/pep-0498/来执行以下操作:
def dd2dms(deg):
d = int(deg)
md = abs(deg - d) * 60
m = int(md)
sd = (md - m) * 60
return f'{d}:{m}:{sd}'
你甚至可以在字符串中进行计算
例如,你可以这样做:def dd2dms(deg):
d = int(deg)
md = abs(deg - d) * 60
m = int(md)
return f'{d}:{m}:{(md - m) * 60}'
但是,明确声明变量通常会更好。