華為機試17-座標移動(較難)
阿新 • • 發佈:2020-08-29
題目描述
開發一個座標計算工具, A表示向左移動,D表示向右移動,W表示向上移動,S表示向下移動。從(0,0)點開始移動,從輸入字串裡面讀取一些座標,並將最終輸入結果輸出到輸出檔案裡面。
輸入:
合法座標為A(或者D或者W或者S) + 數字(兩位以內)
座標之間以;分隔。
非法座標點需要進行丟棄。如AA10; A1A; $%$; YAD; 等。
下面是一個簡單的例子 如:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
處理過程:
起點(0,0)
+ A10 = (-10,0)
+ S20 = (-10,-20)
+ W10 = (-10,-10)
+ D30 = (20,-10)
+ x = 無效
+ B10A11 = 無效
+ 一個空 不影響
+ A10 = (10,-10)
結果 (10, -10)
注意請處理多組輸入輸出
輸入描述:
一行字串
輸出描述:
最終座標,以,分隔
示例1
輸入
A10;S20;W10;D30;X;A1A;B10A11;;A10;
輸出
10,-10
參考1:
注意邏輯
def func(res): #檢查是否有效子函式 r = ['A','S','W','D'] m = ['0','1','2','3','4','5','6','7','8','9'] n = len(res) if n > 1 and n <= 3:if res[0] in r: k = 0 for i in range(1,n): if res[i] not in m: k = 1 if k == 0: return True else: return False else: return False else: return False whileTrue: try: num = list(input().split(';')) n = len(num) h,z = 0, 0 #橫縱座標 for i in range(n): #迴圈操作 res = num[i] if func(res): #檢查是否有效 if res[0] == 'A': h -= int(res[1:]) elif res[0] == 'D': h += int(res[1:]) elif res[0] == 'W': z += int(res[1:]) elif res[0] == 'S': z -= int(res[1:]) print(','.join(map(str,[h,z]))) except: break
執行結果:答案正確:恭喜!您提交的程式通過了所有的測試用例用例通過率:100.00%執行時間:18ms佔用記憶體:3436KB
參考2:
簡潔版
注:startswith() 方法用於檢查字串是否是以指定子字串開頭,如果是則返回 True,否則返回 False。
isdigit() 方法檢測字串是否只由數字組成,如果是則返回 True,否則返回 False。
while 1: try: s_tr = input() cd = [0,0] li = s_tr.split(";") # 字串分割存入列表 for i in li: if i.startswith("A") and len(i) <= 3 and i[1:].isdigit(): cd[0] += -int(i[1:]) elif i.startswith("D") and len(i) <= 3 and i[1:].isdigit(): cd[0] += int(i[1:]) elif i.startswith("W") and len(i) <= 3 and i[1:].isdigit(): cd[1] += int(i[1:]) elif i.startswith("S") and len(i) <= 3 and i[1:].isdigit(): cd[1] += -int(i[1:]) else: continue print(','.join(map(str,cd)))except: break
執行結果:答案正確:恭喜!您提交的程式通過了所有的測試用例用例通過率:100.00%執行時間:20ms佔用記憶體:3448KB