#python #for-loop
#python #для цикла
Вопрос:
Я сталкиваюсь с проблемой, когда мне нужно использовать цикл для диапазона (n), чтобы решить проблему. Но есть условие, при котором иногда мне может потребоваться вызвать index [a 1], чтобы удовлетворить if-условиям. Я понимаю, что это приведет к ошибке index out of range, есть ли какое-либо решение для этого или я должен реализовать другой метод? Некоторые коды прилагаются.
for c in range (n):
out=enter width[c]
if power==cap:
power-=(width[c])*(height[c])*2 2 enter
elif power<cap:
power-=(width[c])*(height[c])*2
print("Field {:d}: completed. Battery: {:d}.".format(c 1,power))
if (power-2-out<(cap*0.5)) or (power-(width[c 1])*(height[c 1])-2-out-
width[c 1]<(cap*0.5)):
power=cap
print("Charging...")
enter =width[c]
Комментарии:
1. Какова ваша желаемая функциональность, когда
c==n
? Ваш текущий код не обязательно приведет к каким-либо ошибкам — это зависит от количества элементов вwidth
иheight
списках2.
for c in range(n-1)
?3. По возможности переформулируйте свою проблему так, чтобы вы рассматривали предыдущий элемент вместо следующего. В этом случае вам даже не понадобится индекс; вы просто помните последнее значение, которое вы видели. Однако не уверен, что это возможно здесь.
Ответ №1:
В этом сценарии я бы сказал, что вам не нужно проходить весь путь до n
.
Возможно, вам следует изменить свой цикл for на for c in range(n-1):
Ответ №2:
Вы могли бы использовать блок try / except:
for c in range (n):
out=enter width[c]
if power==cap:
power-=(width[c])*(height[c])*2 2 enter
elif power<cap:
power-=(width[c])*(height[c])*2
print("Field {:d}: completed. Battery: {:d}.".format(c 1,power))
try:
if (power-2-out<(cap*0.5)) or (power-(width[c 1])*(height[c 1])-2-out-width[c 1]<(cap*0.5)):
power=cap
print("Charging...")
except IndexError:
print("error message here")
enter =width[c]
Однако вы, вероятно, захотите найти другой метод.
Комментарии:
1. Спасибо, я изучил метод try / except, но я не понял, что можно сделать, кроме IndexError. Еще раз спасибо.
2. @EdwardLeung если это решило вашу проблему, пожалуйста, установите серую / зеленую галочку слева от этого ответа, чтобы все знали, что она решена.
Ответ №3:
Если вы знаете, что захотите выполнить итерацию по всему диапазону, тогда вы можете использовать понимание списка для создания диапазона в виде списка, а затем выполнить итерацию по этому списку:
n = 1234 # Some number
nums = [x for x in range(n)] # List comprehension generates a full list for the given range
for i, c in enumerate(nums):
nums[i 1] # Access is valid, as long as index is within bounds of list size
Ответ №4:
Я рекомендую поместить условие в ваш код, запускать команду if только в том случае, если она не выходит за пределы диапазона.
for c in range(n):
out=enter width[c]
if power==cap:
power-=(width[c])*(height[c])*2 2 enter
elif power<cap:
power-=(width[c])*(height[c])*2
try:
print("Field {:d}: completed. Battery: {:d}.".format(c 1,power))
except:
print("out of range")
if (power-2-out<(cap*0.5)) :
power=cap
print("Charging...")
elif c 1 <= len(n) - 1:
if (power-(width[c 1])*(height[c 1])-2-out-width[c 1]<(cap*0.5)):
power=cap
print("Charging...")
enter =width[c]