Python入门习题(81)——OpenJudge百练习题:报站
题目描述
来源
OpenJudge网站 —— 百练习题集-第4097号习题
要求
总时间限制: 3000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB
描述
北京的地铁是很便利的,几乎覆盖了北京所有的重要地点。如果我们常常坐地铁,也会 非常熟悉地铁上报站的声音。”The next station is ZhongGuanCun. Please get ready for your arrival.”。一个乘客在四号线从上车到下车,会听到一系列的车站名:BeiJingDaXueDongMen, ZhongGuanCun, HaiDianHuangZhuang…
现在需要一个程序,对于一名乘客,报出他在乘坐某号线地铁时,从上车到下车经过的 站名(包括上车的站名和下车的站名)。现在请你写一个程序,来实现这个功能。
输入
第一行 n,表示该地铁线路有 n(n<100)个地铁站。从第 2 行到第 n+1 行是有序的 n 个地铁站的站名,站名由英文字母构成,长度不会超过 100,站名不会重复。第 n+2 行为一 个整数 m(m<100),表示有 m 个乘客需要报站名。这之后 m 行,每行为一个乘客上车的站 名和下车的站名。地铁线路没有环线,但是乘客可以正向坐车,也可以反向坐车。
输出
输出 m 行,每行为每个乘客经过的站名,站名中间用空格分隔。行首或行尾不要有多 余的空格。
样例输入
10
BeiJingDaXueDongMen
ZhongGuanCun
HaiDianHuangZhuang
RenMinDaXue
WeiGongCun
GuoJiaTuShuGuan
DongWuYuan
XiZhiMen
XinJieKou
PingAnLi
2
BeiJingDaXueDongMen RenMinDaXue
GuoJiaTuShuGuan ZhongGuanCun
样例输出
BeiJingDaXueDongMen ZhongGuanCun HaiDianHuangZhuang RenMinDaXue
GuoJiaTuShuGuan WeiGongCun RenMinDaXue HaiDianHuangZhuang ZhongGuanCun
解题思路
- 输入n个站名,存入stations列表。
- 读入m个(上车站名,下车站名),存入from_to列表。
- 对于每一对(上车站名, 下车站名):
(3-1)求出上车站名在stations列表的索引from_index;
(3-2)求出下车站名在stations列表的索引to_index;
(3-3)输出from_index到to_index之间的全部站名。 - 用切片操作得出from_index到to_index之间的全部站名。正向的话,增量为1,stations[from_index:to_index + 1]是所求的全部站名。反向的话,增量为-1,stations[from_index:to_index-1:-1]是所求的全部站名。要注意,to_index是0的时候,0-1=-1,stations[from_index: -1:-1]中间的-1是最后一个元素的索引,这一写法是不正确的,应改为:stations[from_index: :-1]。
参考答案
n = int(input())
stations = [input() for i in range(n)]
# print(stations)
m = int(input())
from_to = []
for i in range(m):
f_t = input().strip().split()
if len(f_t) != 2:
continue
from_to.append(f_t)
# print(from_to)
for from_station, to_station in from_to:
if from_station not in stations or to_station not in stations:
print()
continue
from_index = stations.index(from_station)
to_index = stations.index(to_station)
# print(from_index, to_index)
if from_index < to_index:
print(' '.join(stations[from_index:to_index + 1]))
elif to_index == 0:
print(' '.join(stations[from_index::-1]))
else:
print(' '.join(stations[from_index:to_index-1:-1]))
测试用例
- 题目描述给出的测试用例覆盖了正向的情形,也覆盖了反向的情形。
- 从头到尾,从尾到头。
样例输入
10
BeiJingDaXueDongMen
ZhongGuanCun
HaiDianHuangZhuang
RenMinDaXue
WeiGongCun
GuoJiaTuShuGuan
DongWuYuan
XiZhiMen
XinJieKou
PingAnLi
2
BeiJingDaXueDongMen PingAnLi
PingAnLi BeiJingDaXueDongMen
样例输出
BeiJingDaXueDongMen ZhongGuanCun HaiDianHuangZhuang RenMinDaXue WeiGongCun GuoJiaTuShuGuan DongWuYuan XiZhiMen XinJieKou PingAnLi
PingAnLi XinJieKou XiZhiMen DongWuYuan GuoJiaTuShuGuan WeiGongCun RenMinDaXue HaiDianHuangZhuang ZhongGuanCun BeiJingDaXueDongMen
-
上车站名等于下车站名。是不太合理,不过测一测看看,而且拿头尾站点来试一试。
样例输入
10
BeiJingDaXueDongMen
ZhongGuanCun
HaiDianHuangZhuang
RenMinDaXue
WeiGongCun
GuoJiaTuShuGuan
DongWuYuan
XiZhiMen
XinJieKou
PingAnLi
2
BeiJingDaXueDongMen BeiJingDaXueDongMen
PingAnLi PingAnLi
样例输出
BeiJingDaXueDongMen
PingAnLi -
n=1的边界情形。
样例输入
1
BeiJingDaXueDongMen
2
BeiJingDaXueDongMen BeiJingDaXueDongMen
BeiJingDaXueDongMen PingAnLi
样例输出
BeiJingDaXueDongMen -
n=0的边界情形。
样例输入
0
1
BeiJingDaXueDongMen BeiJingDaXueDongMen
样例输出
(注:输出空行) -
m=0的边界情形。
样例输入
1
BeiJingDaXueDongMen
0
样例输出
(注:没有输出) -
m=1的边界情形。
样例输入
10
BeiJingDaXueDongMen
ZhongGuanCun
HaiDianHuangZhuang
RenMinDaXue
WeiGongCun
GuoJiaTuShuGuan
DongWuYuan
XiZhiMen
XinJieKou
PingAnLi
1
BeiJingDaXueDongMen RenMinDaXue
样例输出
BeiJingDaXueDongMen ZhongGuanCun HaiDianHuangZhuang RenMinDaXue
小结
- 上一节给出的各组测试用例全都成功通过。然而,遗憾的是,参考答案一节的代码提交到OpenJudge上之后,报告“Runtime Error”。我猜测是系统验证答案正确性的过程中存在问题。
- 要注意,乘客可以正向坐车,也可以反向坐车。
上一篇: 二货卷子签字爆笑小男孩
下一篇: 下午三点堂弟爆笑经典
推荐阅读
-
Python入门习题(81)——OpenJudge百练习题:报站
-
Python入门习题(87)——OpenJudge百练习题:判断游戏胜者
-
Python入门习题(62)——OpenJudge百练习题:方便记忆的电话号码
-
Python入门习题(63)——OpenJudge百练习题:DNA排序
-
Python入门习题(64)——OpenJudge百练习题:最长单词
-
Python入门习题(66)——OpenJudge百练习题:黑色星期五
-
Python入门习题(72)——OpenJudge百练习题:判断是否可以构成等差数列
-
Python入门习题(76)——OpenJudge百练习题:判断多个点是否在同一直线