Premièrement, return n'est pas une fonction. C'est un mot clef qui te permet de retourner une valeur à l'appelant. En l'occurrence, ici, tu retournes une chaîne de caractères.
Dans l'interpréteur interactif, tu obtiens une représentation pour chaque expression que tu tapes (hors None). Cette représentation est ce que tu entrerais dans Python pour retrouver le même objet ('LX' pour une chaîne de caractères).
En revanche, print imprime cette chaîne de caractères, non sa représentation, donc pas besoin de guillemets autour.
Merci pour ta réponse rapide, j'y vois plus clair maintenant.
Je me permets de poser à nouveau une dernière question en rapport avec mon exercice, s'il faut que je créée un nouveau sujet je le ferai, mais je ne veux pas surcharger le forum de nouveaux topics.
Je cherche faire une boucle qui consiste à prendre un élément au hasard (via la fonction choice) dans une liste, qu'on me le retourne et que celui-ci se pop de la liste une fois que c'est fait. J'ai tenté quelque chose, mais je ne comprends pas pourquoi est-ce que les noms sortent plusieurs fois, malgré le pop.
# -*- coding: utf-8 -*-
from random import *
class Person():
def __init__(self, name):
self.name = name
def __str__(self):
return "Personne : " + str(self.name)
class Etudiant(Person):
def __init__(self, name, noEtudiant):
Person.__init__(self, name)
self.noEtudiant = noEtudiant
def __str__(self):
return Person.__str__(self)+ ", no Etudiant : " + str(self.noEtudiant)
#Et ici pour ce que je cherche à faire
name = ["Monod", "Silva", "Jaquet", "Morier"]
for i in range(4):
print Etudiant(choice(name), randint(1000,1500))
name.pop()
Je me suis permis de remettre pour que ce soit plus clair.
En l'occurrence, lorsque je lance mon script, il y a un nom (au hasard) qui ressort plusieurs fois, malgré le pop.
J'ai tenté de mettre name.pop(i), mais ce n'est pas plus efficace (Erreur : pop index out of range).
Déjà, je ne te conseille pas de faire from random import *, ça encombre inutilement l'espace de nommage courant, préfère from random import choice, randint.
Maintenant, pour ton problème, il vient du fait que pop retire le dernier élément de la liste, mais ton choice sur la ligne précédente n'a aucune influence sur lui.
Face à cela deux solutions: tu récupères dans la liste name l'index du nom que tu viens de tirer et tu le supprimes avec pop(i). Mais étant donné que tu ne stockes nulle part le nom de l'étudiant, il te faudra aussi modifier le code à ce sujet.
Sinon, une solution préférable, est de ne plus utiliser choice, mais de faire un shuffle (du module random elle aussi) sur ta liste, puis de récupérer un étudiant à l'aide de pop:
shuffle(name)
for i in range(4):
print Etudiant(name.pop(), randint(1000, 1500))
Ou encore, puisque tu n'as visiblement pas besoin de les supprimer de la liste:
shuffle(name)
for student_name in name:
print Etudiant(student_name, randint(1000, 1500))
À noter aussi que ta variable name est plutôt mal nommée puisqu'elle ne contient pas un nom mais plusieurs.
C'est vrai qu'il est inutile que je les supprime de la liste, je ne connaissais que pop pour faire ce que je voulais.
Merci pour tes suggestions et ton aide.
Différence entre : qqch et 'qqch'
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique