python - 走十分钟(代码战)- Python
问题描述
我正在对 Codewars 进行 Python 练习。这些是说明:
“你住在笛卡尔市,所有的道路都布置在一个完美的网格中。你提前十分钟到了约会,所以你决定借此机会去走一小段路。这个城市为它的公民提供了一个在他们的手机上生成步行应用程序 - 每次您按下按钮时,它都会向您发送一组代表步行方向的单字母字符串(例如 ['n', 's', 'w', 'e'])。每个字母(方向)总是只走一个街区,你知道穿过一个街区需要一分钟,所以创建一个返回 true 的函数,如果应用程序给你的步行将花费你正好十分钟(你不'不想早或晚!)当然,会让你回到你的起点。否则返回false。
注意:您将始终收到一个有效的数组,其中包含随机排列的方向字母(仅限“n”、“s”、“e”或“w”)。它永远不会给你一个空数组(那不是走路,那是静止不动!)。”
这是我写的代码:
def is_valid_walk(walk):
#determine if walk is valid
location = 0
if len(walk) == 10:
for i in range(0, len(walk)):
if walk[i+1] == walk[i] or walk[i-1] == walk[i]:
return False
else:
if i == 'n':
location+=1
elif i == 's':
location-=1
elif i == 'w':
location+=2
elif i == 'e':
location-=2
return location == 0
else:
return False
我似乎有一个索引错误。它说它超出范围。
Traceback (most recent call last):
File "main.py", line 4, in <module>
test.expect(is_valid_walk(['n','s','n','s','n','s','n','s','n','s']), 'should return True');
File "/home/codewarrior/solution.py", line 7, in is_valid_walk
if walk[i+1] == walk[i] or walk[i-1] == walk[i]:
IndexError: list index out of range
有人可以指出我该如何解决这个问题吗?
解决方案
问题在代码的以下部分。
if len(walk) == 10:
for i in range(0, len(walk)):
if walk[i+1] == walk[i] or walk[i-1] == walk[i]: #IndexError here
return False
当您尝试获取列表中不存在或超出该列表范围的索引时,会发生 IndexError。这里循环将从 0 运行到 9,这意味着您的代码将尝试在最后一次迭代中比较walk[9+1]
ie 。walk[10]
因为,索引 0 到 9 是为 list walk 定义的,所以当我们尝试索引 10 或i=10
. 同样检查walk[i-1]
when i=0
。
这可以通过添加适当的 if 条件来解决。
推荐阅读
- object - 访问 Knockout Js 对象数据
- windows - Pickled Matplotlib 3D 缺乏交互功能
- jenkins - SonarQube 扫描仪执行错误 [Windows - Linux 主从]
- javascript - 如何从包含特定单元格值的 Web 表中获取整行
- kubernetes - 与 Pod 自动缩放的 Pubsub 数据关联
- java - 如何将char转换为int并分配给java中的其他对象
- c# - 根据具体对象的 Color 属性设置 WPF DataGridRow 背景颜色
- r - 从多个 csv 文件导入数据集的问题
- python - 如何使用 itemgetter 对列表进行排序
- spring-boot - Spring批处理作业执行错误:无法将NULL插入(BATCH_JOB_EXECUTION.START_TIME)