Bonjour, je suis sur un petit projet en python3 où je dois créer une matrice de probabilité à partir d'un fichier faste (fichier texte spé).
Le programme doit faire appel à 5 paramètres: le 4eme paramètre est la longueur de la chaîne D’ADN (qui doit être supérieur à 0)
Je crée donc une fonction qui récupère ce paramètre, comme ci dessous qui retourne le 4ème élement de la liste *args
def get_row_size(*args):
if (args[4]>0):
return(args[4]) #On retourne le 4eme élément la liste *args
else:
raise ValueError
Mon soucis c'est que quand je fait appel à cette fonction:
import sys
seuil = get_row_size(sys.argv)
Cela m'affiche une erreur type IndexError avec un index "out of range" mais je ne vois pas où ? Je suis encore novice donc quelquechose doit surement m'échapper..
Merci d'avance ;)
# Indices
Posté par chimrod (site web personnel) . Évalué à 1.
Ton paramètre est un Tableau (structure de données), et tu y accèdes en lui indiquant une position. (ici une position négative n'a pas de sens, donc tu contrôle que l'indice est positif). Par contre, combien as tu de lignes et de colonnes dans ton tableau ?
[^] # Re: Indices
Posté par Marco . Évalué à 4. Dernière modification le 21 novembre 2018 à 11:57.
Pour info en python tu peux mettre une position négative et ça m'a déjà crée un bug bien vicieux
-1 te renverra la dernière valeur, -2 l'avant dernière etc.
Par exemple :
# Opérateur *
Posté par GuieA_7 (site web personnel) . Évalué à 7. Dernière modification le 20 novembre 2018 à 17:44.
Soit tu déclares ta fonction comme prenant un seul paramètre (un tuple) et tu l'appelles avec 1 seul paramètre:
Soit tu déclares ta fonction comme prenant N paramètres, et tu l'appelles en "explosant" le tuple :
Actuellement tu mélanges les 2, et ta fonction reçoit bien un seul argument (seul args[0] ne provoquera pas d'erreur, et sera un tuple avec tous tes arguments).
Quelques remarques:
if len(args) > 3
avant de faire unargs[3]
par exemple.args[4]
; il s'agit bien du 5ème élément (vu que les indices commencent à 0).[^] # Re: Opérateur *
Posté par leonardo . Évalué à 2.
Merci beaucoup pour ces explications claires. Ca a arrangé mon problème (Bien vu pour l'indice 0= nom de l'executable à prendre en compte)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.