无法让我的函数返回正确的布尔值

时间:2020-05-04 23:11:34

标签: python-3.x

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。有人可以帮助我了解我的代码有什么问题吗?

2 个答案:

答案 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)(从技术上讲可以是任何东西),然后继续沿这些坐标移动(根据nsew),最后,它检查最终位置是否与您开始时的初始位置相等。