Два False в цикле while

#python

#python

Вопрос:

Мне нужен кто-то, кто может помочь мне с кодом python. В этом случае я ищу пик на левом и правом сайтах.

Я хотел бы, чтобы, когда h[x 1] < h[x] тогда x = x-1 и summit=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)
 

Комментарии:

1. Возможно, я ошибаюсь, но оператор else в вашем цикле while, я думаю, имеет в виду сказать h[x - 1] ?

2. Эй, Джакс Теллер, я замкнул этот этап, и теперь у меня есть while not summit: summit = True # stop unless there's a way up if h[x 1] > h[x]: x = x 1 # right is higher, go there summit = False # and keep going else: x = x - 1 # right is higher, go there #summit = False #summit = False return x

Ответ №1:

Возможно, было бы проще не обрабатывать подсчет индекса самостоятельно, но позволить enumerate сделать это за вас. Затем выполните цикл по всем значениям и оставьте функцию, если вы нашли значение, удовлетворяющее требованиям.

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

Проверка границ отсутствует, поэтому мы предполагаем, что в данных можно найти вершину.

Комментарии:

1. Самый важный момент — понять, как enumerate это работает. Все остальное должно быть понятным.