如何解决十分钟步行Codewars-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']),'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]
,即walk[10]
。由于为列表遍历定义了索引0到9,因此当我们尝试索引10或i=10
时将给出索引错误。同样,在walk[i-1]
时检查i=0
。
这可以通过添加适当的条件来解决。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。