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]
4 Réponses :
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
Dans ce scénario, je dirais que vous n'avez pas besoin d'aller jusqu'au Peut-être que vous devriez changer votre boucle pour n code>. p>
pour C dans la plage (N-1): code> p>
Vous pouvez utiliser un blocage / sauf bloc: Cependant, vous voulez probablement comprendre une méthode différente. p> p>
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.
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]
Quelle est la fonctionnalité souhaitée lorsque
c == n code>? Votre code actuel ne conduira pas nécessairement à des erreurs - cela dépend du nombre d'éléments de la largeur code> et dehauteur code>pour C dans la plage (n-1) code>?Dans la mesure du possible, recadriez votre problème pour que vous envisagiez l'élément précédent i> 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.