首页 > 解决方案 > while 循环中有两个 False

问题描述

我想要一个可以帮助我编写 python 代码的人。在这种情况下,我正在寻找左右站点的峰值。

我想那个h[x+1] < h[x]时候x = x-1summit=False。我正在尝试编写第二个循环,但此解决方案不起作用。

下面是我的代码:

import math
import random                                                
                                                                             
w = [random.random()/3, random.random()/3, random.random()/3]
h = [1.+math.sin(1+x/6.)*w[0]+math.sin(-.3+x/9.)*w[1]+math.sin(-.2+x/30.)*w[2] for x in range(100)]
h[0] = 0.0; h[99] = 0.0

print(h)

def climb(x, h):
    # keep climbing until we've found a summit
    summit = False

    # edit here
    while not summit:
        summit = True         
        if h[x + 1] > h[x]:
            x = x + 1        
            summit = False    
        else: 
            if h[x + 1] < h[x]:
                x = x - 1         
                #summit = False 
            #summit = False 
    return x


def main(h):

    # start at a random place                                                                                    
    x0 = random.randint(1, 98)
    x = climb(x0, h)

    print("Venla started at %d and got to %d" % (x0, x))
    return x0, x

main(h)

标签: python

解决方案


不自己处理索引计数可能会更容易,但让enumerate您为自己做这件事。然后遍历所有值并在找到满足要求的值时离开函数。

def climb(x, h):
    for idx, value in enumerate(h):
        if h[idx-1] < value and value > h[idx+1]:
            return idx

没有边界检查,所以我们假设可以在数据中找到一个顶点。


推荐阅读