Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Comment utiliser une chaine de caractère dans une fonction

–1 vote

j'ai une fonction dont j'aimerais pouvoir utiliser en argument une chaine de caractère

objectif: la réemployer pour appeler des listes nommées

exemple:

bleu_jour1=[0,0,0,0,0,0]

def fun (a):
    return("a"_jour1)

problème:
Je ne sais pas comment je dois faire pour que l'argument de ma fonction sois réutilisable pour appeler la variable qui lui correspond

QUESTION 2:

for g in range (0,9):
    for k in range (0,9):
        if k==3:
            break
        print(k,g)

cette fonction coupe la première boucle for à chaque fois qu'elle atteint la valeur 3

comment faire pour que lorsque k=3, les deux boucles for soient arrétées?

demandé 6-Jun-2017 par Aklinar (98 points)
edité 6-Jun-2017 par max

2 Réponses

0 votes

Il aurait fallu faire un poste pour chaque question.

question 1

il faut savoir dans quel scope sont stocké tes listes et même si je pense qu'il y'as une erreur dans ta conception du programme:

def get_list_in_globals(list_name):
    return globals()[list_name]

# pour ton cas
def get_list_in_globals(color):
    return globals()["%s_jour1" % color]

question 2

si tes boucles sont dans une fonction tu peux mettre simplement un return k, g
sinon k est accessible dans la deuxième boucle

for g in range (0, 9):
    for k in range (0, 9):
        if k == 3:
            break
    if k == 3:  
        print(k,g)
        break
répondu 6-Jun-2017 par ptank (370 points)

Personnellement je trouve ça moche d'utiliser globals pour récupérer une valeur depuis la stack. L'idéal serait quand même de référencer les éléments dans un dictionnaire.

0 votes

pour la deuxième question, une solution qui me paraît élégante est d'utiliser le mécanisme optimisé des exceptions :

try:
    for g in range (0,9):
        for k in range (0,9):
            if k==3:
                raise StopIteration()
    print(k,g)
except StopIteration:
    pass

remarque: la notation range(9) est plus pythonesque et donc recommandée que range(0,9)

répondu 26-Jun-2017 par FredJ (108 points)
...