0
votes

Fonction pour trouver le plus grand nombre dans une liste en python

line 6, in high
    if num > z:
UnboundLocalError: local variable 'z' referenced before assignment

1 commentaires

Vous avez dit à Python de faire quelque chose lorsque num est plus grand que z , mais qu'est-ce que z ?


4 Réponses :


3
votes

Vous ne pouvez pas utiliser une variable sans la définir au préalable, vous devez donc définir z = x [0]

Le deuxième problème est avec print (z) code > z est une variable locale que vous ne pouvez pas appeler comme ça, vous devez enregistrer tout ce que high () retourne d'abord dans une variable puis l'imprimer

x = [5 ,8 , 3 ,29, 445, 54]


def high():
    z = x[0]
    for num in x:
        if num > z:
            z = num
    return z

z = high()

print(z)


4 commentaires

Après avoir défini z = x [0] , il est plus judicieux de commencer le traitement de la liste à x [1] c'est-à-dire pour num in x [1:]: < / code>


Je sais, tu as raison. J'avais l'intention de garder simple pour lui / elle de savoir ce que j'ai ajouté sans confusion. Je pense que tout est question d'apprendre et non de répondre à la meilleure chose


@Nick Logiquement, c'est vrai, mais utiliser x [1:] entraînerait la copie de la liste entière (moins le premier élément), ce qui en général serait bien plus lent que de vérifier le premier élément. Cette optimisation n'aurait de sens que si elle utilisait un index pour accéder aux éléments de la liste, en évitant la copie, mais ce serait probablement plus lent également.


@TomKarzes intéressant. J'aurais pensé que dans un contexte comme num in x [1:] , l'interpréteur aurait été assez intelligent pour se rendre compte qu'il n'avait pas besoin d'une copie. Merci de m'en avoir informé, j'essaierai d'éviter cette construction.



0
votes

Vous devez toujours déclarer une variable avant d'utiliser cette variable.

x = [5 ,8 , 3 ,29, 445, 54]

def high(x):
    z = 0    # add this line and..
    for num in x:
        if num > z:
            z = num
    return z

z = high(x)  # ..this line 

print(z)


0 commentaires

0
votes

Merci de nous avoir contactés. Tout d'abord, z n'a pas été défini dans votre fonction. Nous définissons z et le définissons sur un entier de 0. Le code

x = [5 ,8 , 3 ,29, 445, 54]

def high(list_of_numbers):
    z = 0
    for num in x:

        if num > z:
            z = num
    return z

print(high(x))


0 commentaires

0
votes

vous devez d'abord déclarer une variable avant d'utiliser cette variable globalement en utilisant global keyword.like z = x [0]

x=[5,8,3,29,445,54]
def high():
    global z
    z=x[0]
    for num in x:
        if(num>z):
            z=num
    return z
high()
print(z)


0 commentaires