Как сделать «для цикла in range (n)» и вызвать данные [a + 1] - PullRequest
0 голосов
/ 03 апреля 2019

Я столкнулся с проблемой, когда мне нужно использовать цикл in (n) для решения проблем.Но есть условие, когда иногда мне может понадобиться вызвать index [a + 1] для удовлетворения условий 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
  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]

Ответы [ 4 ]

1 голос
/ 03 апреля 2019

В этом сценарии я бы сказал, что вам не нужно идти до n.

Возможно, вам следует изменить цикл for на for c in range(n-1):

0 голосов
/ 03 апреля 2019

Я рекомендую поместить условие в ваш код, запускать команду 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]
0 голосов
/ 03 апреля 2019

Вы можете использовать блок try / Кроме:

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]

Однако вы, вероятно, захотите найти другой метод.

0 голосов
/ 03 апреля 2019

Если вы знаете, что хотите выполнить итерацию по всему диапазону, то вы можете использовать понимание списка, чтобы сгенерировать диапазон как список, а затем выполнить итерацию по этому списку:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...