Bienvenue sur IndexError.

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

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

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 par Aklinar (98 points)
edité 6-Jun 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 par ptank (308 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 par FredJ (108 points)
...