我想知道是否有人知道此代码将十进制度数转换为度数,分钟和秒数有什么问题:
while True:
latitude = float(input("Enter a Decimal Degree latitude: "))
print(latitude)
longitude = float(input("Enter a Decimal Degree longitude: "))
print(longitude)
print("Result: ")
deg = int(latitude)
min = int((latitude - deg) * 60)
sec = ((latitude - deg) * 60) - min
DMS = str(deg) + u"\u00b0" + str(min) + "'" + str(sec) + "'' "
for latitude in range(-90, 90):
if latitude < 0:
direction = "S"
elif latitude > 0:
direction = "N"
print(DMS + direction)
deg = int(longitude)
min = int((longitude - deg) * 60)
sec = ((longitude - deg) * 60) - min
DMS = str(deg) + u"\u00b0" + str(min) + "'" + str(sec) + "'' "
for longitude in range(-180, 180):
if longitude < 0:
direction = "W"
elif longitude > 0:
direction = "E"
print(DMS + direction)
while True:
another = input("Shall this program run another conversion? (Y/N)")
if another in ("Y", "N"):
break
print("This question needs a proper answer.")
if another == "Y":
continue
elif another == "N":
break
它一直超出纬度和经度值的限制。可能有什么不对?
答案 0 :(得分:0)
因此,当您输入的值高于纬度或经度的正常范围时,可能会出现问题。例如,如果用户以经度进入200度,他们将获得200度0分0秒但你希望它返回-20度0分0秒,因为它缠绕在日期线上。您需要在代码中实现该行为,如下所示:
limited_longitude = (longitude + 180.0) % 360.0 - 180.0
deg = int(limited_longitude)
min = int((limited_longitude - deg)*60)
...
在上面的代码中,%
是模数运算符,它在除法后得到余数,例如380 % 360 = 20
。由于经度是-180到180,你必须将整个事物前后移动180度以获得正确的效果。
您需要为纬度找出类似的逻辑。