Как создать «для цикла в диапазоне (n)» и вызвать данные [a 1]

#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]