def is_valid_walk(walk):
n = 0
s = 0
w = 0
e = 0
for dire in walk:
if dire == 'n':
n+=1
if dire == 's':
s+=1
if dire == 'e':
s+=1
if dire == 'w':
s+=1
return s == n and w == e and (n + s + e + w) == 10
我写了这段代码来确定散步是否会让我回到原来的位置并花费10分钟。在此练习中,如果给出了要进入的方向,您将走一个街区。而且每个街区只需要一分钟。为此返回true的代码示例为['n','s','n','s','n','s','n','s','n',' s']。但是,当我将['n','s','e','w','n','s','e','w','n','s']插入代码时,说结果应该为True,但是结果为False。有人可以帮助我了解我的代码有什么问题吗?
答案 0 :(得分:0)
在您的代码中,您错误地执行了<div id="container"></div>
3次。
该代码应为:
s+=1
输出:
def is_valid_walk(walk):
n = 0
s = 0
w = 0
e = 0
for dire in walk:
if dire == 'n':
n+=1
if dire == 's':
s+=1
if dire == 'e':
e+=1
if dire == 'w':
w+=1
return s == n and w == e and (n + s + e + w) == 10
print(is_valid_walk(['n', 's', 'n', 's', 'n', 's', 'n', 's', 'n', 's']))
print(is_valid_walk(['n', 's', 'e', 'w', 'n', 's', 'e', 'w', 'n', 's']))
答案 1 :(得分:0)
对于这个问题,我建议使用另一种解决方案,仅使用两个计数变量而不是四个(在变量d
下面的代码中等同于您的变量dire
):
def is_valid_walk(walk):
if len(walk) != 10:
return False
initial_x = 0
initial_y = 0
final_x = initial_x
final_y = initial_y
for d in walk:
if d == 'n':
final_y += 1
if d == 's':
final_y -= 1
if d == 'e':
final_x += 1
if d == 'w':
final_x -= 1
return final_x == initial_x and final_y == initial_y
print(is_valid_walk(['n', 's', 'n', 's', 'n', 's', 'n', 's', 'n', 's']))
print(is_valid_walk(['n', 's', 'e', 'w', 'n', 's', 'e', 'w', 'n', 's']))
输出:
True
True
它基本上使用坐标,首先假设正在移动的物体的位置为(x = 0, y = 0)
(从技术上讲可以是任何东西),然后继续沿这些坐标移动(根据n
,s
,e
和w
),最后,它检查最终位置是否与您开始时的初始位置相等。