1. 程式人生 > 實用技巧 >華為機試17-座標移動(較難)

華為機試17-座標移動(較難)

題目描述
開發一個座標計算工具, 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 = 無效

+ A1A = 無效
+ 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 while
True: 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