2017-08-18 3 views
-1

Je suis confus au sujet de la sortie de mon code.Python Open File - Si Else Instruction

Ceci est mon fichier:

201707001 Jenson_ 
201707002 Richard 
201707003 Jean 

Voici mon code:

def studentInfo (userInput): # storing student info 
    # read the students file 
    with open('C:\\Users\\jaspe\\Desktop\\PADS Assignment\\Student.txt') as f: 
     for line in f: 
      stdId, stdName = line.strip().split(" ", 1) 
      # check if the student exist 
      if userInput == stdId: 
       print("Student found!") 
       print("Student ID: " + stdId + "\nStudent Name: " + stdName) 
      else: 
       print("The student does not exist") 


studentFinder = input("Please enter id: ") 
studentInfo(studentFinder) 

Ceci est ma sortie du code

Please enter id: 201707001 
Student found! 
Student ID: 201707001 
Student Name: Jenson 
The student does not exist 
The student does not exist 

Comment puis-je réparer mon code?

+2

Votre question n'est pas claire. Vous dites "existe-t-il un moyen de réparer mon code" mais vous ne dites pas ce que le code devrait faire. S'il vous plaît examiner https://stackoverflow.com/help/how-to-ask – mtrw

Répondre

3

votre instruction else est trop récente. Il sortira "trouvé" quand trouvé, et sur la ligne suivante il sortira "non trouvé"!

Vous ne pouvez pas savoir que vous n'avez pas trouvé l'étudiant avant la fin du fichier.

Permettez-moi de proposer une solution à l'aide homologue else pour for:

for line in f: 
     stdId, stdName = line.strip().split(" ", 1) 
     # check if the student exist 
     if userInput == stdId: 
      print("Student found!") 
      print("Student ID: " + stdId + "\nStudent Name: " + stdName) 
      break 
    else: 
     print("The student does not exist") 

maintenant si l'étudiant se trouve, appelez break. Si break n'est pas appelée, else de la boucle for est entrée. Nice caractéristique python, pas bien connu

(ne fonctionne pas si vous voulez faire correspondre plusieurs fois).

Notez que sur le long terme, vous pouvez stocker le contenu de votre fichier dans un dictionnaire si recherche sera plus rapide pour plusieurs recherches:

with open('C:\\Users\\jaspe\\Desktop\\PADS Assignment\\Student.txt') as f: 
    d = dict(zip(line.split(" ",1) for line in f) 

maintenant d est votre id => dictionnaire de noms, à l'aide rapide recherche lorsque vous avez beaucoup de requêtes à effectuer (le fichier est juste lu une fois, et le dictionnaire utilise hash pour la recherche rapide)

+0

C'est intéressant. Je n'ai jamais vu un 'else' utilisé comme ça auparavant. Est-ce considéré comme "meilleure pratique"? –

+0

@CoryMadden - il fait partie de la langue, si elle aide à résoudre un problème et est * lisible *, utilisez-la. – wwii

+0

@wwii et je pourrais juste. Je me demande vraiment s'il y a une raison de ne pas l'utiliser. Il y a beaucoup de choses qui font partie du langage et qui sont considérées comme «mauvaises» à utiliser, comme l'utilisation de 'eval'. Bien sûr, tout a son cas d'utilisation, mais est-ce qu'il y a des pièges dont il faut être conscient quand on l'utilise? –