0
votes

Comment faire "pour une boucle de plage (n)" et appelle des données [A + 1]

Je rencontre un problème où je dois utiliser pour une boucle de plage (n) pour résoudre les choses. Mais il y a une condition là où je pourrais parfois avoir besoin d'appeler index [A + 1] pour satisfaire les conditions de la vie. Je me rends compte que cela entraînerait une erreur d'index hors de portée, y a-t-il une solution ou devrais-je mettre en œuvre une autre méthode? Quelques codes attachés.

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]


3 commentaires

Quelle est la fonctionnalité souhaitée lorsque c == n ? Votre code actuel ne conduira pas nécessairement à des erreurs - cela dépend du nombre d'éléments de la largeur et de hauteur


pour C dans la plage (n-1) ?


Dans la mesure du possible, recadriez votre problème pour que vous envisagiez l'élément précédent au lieu de la suivante. Vous n'aurez même pas besoin de l'indice dans ce cas; Vous vous rappelez juste que la dernière valeur que vous avez vue. Pas sûr que cela soit possible ici, cependant.


4 Réponses :


0
votes

Si vous savez que vous allez vouloir itérer via toute la gamme, vous pouvez utiliser une compréhension de la liste pour générer la gamme sous forme de liste, puis itérer sur cette liste:

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


0 commentaires

1
votes

Dans ce scénario, je dirais que vous n'avez pas besoin d'aller jusqu'au n .

Peut-être que vous devriez changer votre boucle pour pour C dans la plage (N-1):


0 commentaires

0
votes

Vous pouvez utiliser un blocage / sauf bloc: xxx

Cependant, vous voulez probablement comprendre une méthode différente.


2 commentaires

Merci, j'ai examiné l'essai / à l'exception de la méthode, mais je n'ai pas réalisé à l'exception de l'indexerError pourrait être fait. Merci encore.


@Edwardleung Si cela résolvait votre problème, veuillez cocher la coche grise / verte à gauche de cette réponse afin que tout le monde sache que cela a été résolu.



0
votes

Je recommande de mettre la condition dans votre code, exécutez uniquement la commande si elle n'est pas hors de portée.

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 commentaires