Niveau: débutant

Hé, j'essaie de résoudre un exercice en Python.

Le code compare userName donné dans l'argument de fonction print(getUserPoint("Benny")), si ce nom existe dans userScores.txt, je voudrais retourner le score utilisateur, sinon je voudrais retourner une chaîne "-1".

Si j'utilise print un résultat est imprimé comme prévu, cependant si j'utilise return, la fonction retourne toujours "-1", même si un nom d'utilisateur existe dans un fichier.

On dirait qu'il ne lit que le premier utilisateur, note les valeurs du fichier .txt.

Quelqu'un peut-il expliquer pourquoi le "retour" fonctionne de cette façon dans ce cas?

UserScores.txt:

Ann, 100
Benny, 102
Carol, 214
Darren, 129

Code:

  try:
        def getUserPoint(userName):
            f = open("userScores.txt", "r")
            file = f.readlines()
            print(file)
            for item in file:
                print(item)
                content = item.split(',')
                if content[0] == userName:
                    f.close()
                    return content[1]
                    #print(content[1])
                else:
                    f.close()
                    return "-1"
                    #print("-1")
    except IOError:
        print("File not found")
        f = open("userScores.txt", "w")
        f.close()
        print("-1")
0
Ale 20 nov. 2018 à 12:30

3 réponses

Meilleure réponse

Vous fermez le fichier après la première itération, vous devez éliminer le else qui se trouve à l'intérieur de la boucle et l'extraire à l'extérieur. En fait, je propose que vous refactorisez le code pour utiliser with, c'est une façon beaucoup plus propre de gérer la fermeture des fichiers:

def getUserPoint(userName):
    try:
        with open("userScores.txt", "r") as file:
            for item in file:
                print(item)
                content = item.split(',')
                if content[0] == userName:
                    return content[1]
            return "-1"
    except IOError:
        print("File not found")
        return "-1"
2
Óscar López 20 nov. 2018 à 09:45

À la première itération de la boucle où le nom dans le fichier ne correspond pas au nom que vous avez passé à la fonction, il retournera et ne poursuivra pas la boucle.

Par exemple. Si vous appelez getUserPoint('Benny')

Lors de la première itération de la boucle, il comparera "Ann" == "Benny"

Cela renvoie false, donc le contrôle passe à votre clause else et return à partir de la fonction - plus de boucle.

1
richflow 20 nov. 2018 à 09:36
import os

def getUserPoint(userName):
    f=open('userScores.txt')
    file=f.readlines()
    for item in file:

        content=item.split(',')

        if content[0]==userName:
            f.close()
            return content[1]
        else:
            continue

    f.close()   
    print('UserNotfound')
    return '-1'

x=getUserPoint('Benny')
print(x)
0
wishmaster 20 nov. 2018 à 09:55