somme de deux nombres venant de la ligne de commande
Je sais que c'est un programme de base, mais j'obtiens une erreur de la liste hors de portée. Voici le programme afin de tirer les deux numéros que les arguments de ligne de commande (lors de l'ouverture du script) et affichage de la somme (à l'aide de python):
import sys
a= sys.argv[1]
b= sys.argv[2]
sum=str( a+b)
print " sum is", sum
- aussi, avant d'arriver args vérifier si len(sys.argv) >= 3
- NE pas utiliser
sum
comme nom de variable.sum
est une fonction Python. - kurczak: Ou il suffit de prendre l'exception. De toute façon, le seul de la liste hors de portée de l'exception ici est que vous ne passez pas les deux arguments de la programme de!
Vous devez vous connecter pour publier un commentaire.
Ce faire, vous devez:
Il n'est pas nécessaire pour les str() lors de l'impression d'un entier. Mais vous devez utiliser int() si vous souhaitez ajouter a et b entiers.
a, b = sys.argv[1:2]
entraînera ValueError, en raison de règles de découpage.L'erreur
list index out of range
signifie que vous essayez d'accéder à un élément de liste qui est en dehors des limites de la liste.Exemple:
Dans votre cas, l'erreur provient soit de
sys.argv[1]
ousys.argv[2]
.Assurez-vous que vous avez réellement passer quelque chose pour le programme à partir de la ligne de commande.
En supposant que vos entrées sont des nombres entiers:
ou
Si pas le cas, modifiez int float.
La deuxième méthode est sans doute plus pythonic, mais la première est un peu plus rapide dans ce cas.
sum(int(arg) for arg in sys.argv[1:])
sum(i for i in some_sequence)
au lieu desum(some_sequence)
... si "courte" est nécessaire, essayez 'sum(map(int, sys.argv[1:]))`from itertools import imap; sum(imap(int,xrange(100)))
Et vous devez être prudent avec votre variable d'appellation.
sum
ombres intégré, c'est pas une bonne pratique pour le faire (c'est le cas, ne pas le nom de variables, comme les fonctions intégrées ou tout globalement défini nom).Si votre erreur est "list index out of range", puis le problème est que votre liste n'a pas assez d'éléments. La liste? Le seul de la liste que vous utilisez est
sys.argv
, donc, pour la remplir, vous devez passer plus d'éléments sur la ligne de commande.Sinon, vérifiez la longueur de la liste d'arguments avec
len(sys.argv)
et invite de manière interactive (en utilisant par exempleraw_input()
) pour obtenir les valeurs si ils ne sont pas danssys.argv
.Si vous souhaitez additionner les nombres flottants nombre de points d'utiliser "float" au lieu de "int", comme dans l'extrait suivant.
Attention, floating points sont différents des nombres réels, de sorte que vous pouvez obtenir apparemment "étrange" des résultats sur lesquels il y a une mine de documentation sur le web.
Merci à tous. J'ai eu la réponse
for i in range (1,51):
si j'%5==0:
imprimer i,"\n"
autre chose:
l'impression que j',