#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
это работает. Все остальное должно быть понятным.