题目描述
开发一个坐标计算工具, 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)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201123165525282.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Nzg2OTgwOQ==,size_16,color_FFFFFF,t_70#pic_center)
解题思路
这一题的做法很简单,首先就是对字符串进行处理,再排除掉不符合规则的坐标,再对剩下的坐标进行判断
- 对字符串进行分隔处理,得到每一个需要就算的坐标
- 删除掉不符合规则的坐标
- 再对剩下的坐标进行判断(如A1A之类的),不符合规则的也要进行删除
- 最后就是进行坐标的运算
代码实现
new_str = input()
str_list = new_str.split(';')
list2 = []
for i in str_list:
if len(i) > 3:
str_list.remove(i)
elif len(i) < 3:
str_list.remove(i)
# 判断开头是否为字母
a = i[0:1:].isalpha()
# 判断是否为数字
b = i[1::].isdigit()
if a and b:
# 符合规则的坐标进行保留
list2.append((i[0:1:], i[1::]))
a1 = [0, 0]
for i in list2:
if i[0] == 'A':
a1[0] -= int(i[1])
if i[0] == 'D':
a1[0] += int(i[1])
if i[0] == 'W':
a1[1] += int(i[1])
if i[0] == 'S':
a1[1] -= int(i[1])
print(str(a1[0]) + ',' + str(a1[1]))
总结
代码中还有一些瑕疵,比如没有对坐标首字母进行四个方位A、S、D、W的判断,不过基本上是通过了。(要是写得不好,大佬们轻喷。)