1. 程式人生 > 實用技巧 >python計算登山隊最遠座標

python計算登山隊最遠座標

總部為(0,0),輸入字元以及座標,求出最遠座標且最先到達的座標

import re,math
s = "abcccc(3,10)c5,13d(1$f(6,11)sdf(510,200)adas2d()(011,6)" #原始字串
#print(re.findall(r'[^()a-z]+', s))
pattern = re.compile(r'\(([0-9]{1,3},[0-9]{1,3})\)') #提取座標正則表示式物件
result = re.findall(pattern,s) #查詢整個字串,得出座標列表
f_result={}
#判斷是否為合格的十進位制整數,且大於0小於500
def isDigit(str1):
    
if len(str1)==3: if str1[0]=='0': return False elif int(str1[0])>=5: return False else: return True if len(str1)==2: if str1[0]=='0': return False else: return True if len(str1)==1: if str1=='
0': return False else: return True #遍歷得出的座標列表,求得他距離總部(0,0)的距離,距離為x^2+y^2,並儲存到字典f_result for i in result: i=i.split(',') if isDigit(i[0]) and isDigit(i[1]): f_result[','.join(i)]=math.pow(int(i[0]),2)+math.pow(int(i[1]),2) #求得最遠距離 a=max(f_result.values()) #最遠距離的距離和座標字典
z_result=[] for i in f_result: if f_result[i]==a: z_result.append(i) #最遠距離下,x+y和與座標 he_result={} #如果最遠距離相等,判斷誰先到達,規則x+y for i in z_result: i=i.split(',') he_result[','.join(i)]=int(i[0])+int(i[1]) #求得和的最小值 b=min(he_result.values()) #遍歷,打印出最小和的座標 for i in he_result: if he_result[i]==b: print('('+i+')') #print(i,i[0],i[1],isDigit(i[0]),isDigit(i[1]),f_result,a,z_result,z_result[0],he_result)