Pages : 1
#1 Le 09/03/2019, à 19:20
- piter42
"RESOLU" blocage script python
bonsoir,j aurai besoin de votre aide pour ce script de gérard swinnen
#!/usr/home/programmation/env python3
# -*- coding = utf-8 -*-
def encodage():
# renvoie la liste des entrées ou une liste vide
print("veuillez entrer des valeurs ou <inter> pour quitter :")
while 1 : # condition de la boucle
nom = input("nom : ")
if nom == "":
return[]
prenom = input("prénom : ")
adresse = input("adresse : ")
cpostal = input("code postal : ")
ntel = input("n° de tel : ")
print(nom,prenom,adresse,cpostal,ntel)
verif = input("si ok <inter> sinon <n>")
if verif == "":
break
return[nom,prenom,adresse,cpostal,ntel]
print(encodage())
# enregistrer avec '*' en début de mots
def enregistrer(liste):
i = 0
while i < len(liste):
f.write(liste[i] + '*')
i += 1
f.write("\n") # caractère fin de ligne
nomf = input("nom fichier destinataire: ")
f = open(nomf,"a")
while 1:
tt = encodage()
if tt == []:
break
enregistrer(tt)
print( enregistrer(tt))
f.close()
Pourquoi le" print enregistre(tt)" de la fin ne me retourne rien ? j ai écrit le "print encodage() "pour essai et lui me retourne une liste.Comme si la fonction enregistrer() ne fonctionnait pas ?? j ai écrit les codes pour les exercices suivants qui sont en rapport avec cet exercice là ,mais ils ne me retournent rien car il doit y avoir un souci avec celui là.
merci pour votre aide
Dernière modification par piter42 (Le 11/03/2019, à 11:04)
Hors ligne
#2 Le 09/03/2019, à 19:35
- melixgaro
Re : "RESOLU" blocage script python
Bonsoir,
Ta fonction encodage renvoie une liste alors que ta fonction enregistrer ne renvoie rien (pas d'instruction return).
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#3 Le 10/03/2019, à 08:59
- piter42
Re : "RESOLU" blocage script python
Bonsoir,
Ta fonction encodage renvoie une liste alors que ta fonction enregistrer ne renvoie rien (pas d'instruction return).
est ce que ça veut dire qu elle ne fonctionne pas ?
Hors ligne
#4 Le 10/03/2019, à 09:31
- pingouinux
Re : "RESOLU" blocage script python
Bonjour,
est ce que ça veut dire qu elle ne fonctionne pas ?
Elle fonctionne en ce sens qu'elle écrit sur le fichier, mais comme elle ne renvoie rien, tu obtiens None si tu essayes d'imprimer le résultat.
Remarques :
1) Au lieu de
print(encodage())
il vaut mieux imprimer tt dans la dernière boucle while, sinon tu dois à nouveau rentrer des valeurs.
2)Tu peux remplacer
i = 0
while i < len(liste):
f.write(liste[i] + '*')
i += 1
par
f.write('*'.join(liste))
ou, si tu veux le * final
f.write('*'.join(liste) + '*')
Hors ligne
#5 Le 10/03/2019, à 10:52
- piter42
Re : "RESOLU" blocage script python
merci pingouinux,
j ai essayé un print(tt) à la fin de la derniere boucle while et il me renvoie une liste vide ?
Dernière modification par piter42 (Le 10/03/2019, à 11:15)
Hors ligne
#6 Le 10/03/2019, à 11:45
- pingouinux
Re : "RESOLU" blocage script python
j ai essayé un print(tt) à la fin de la derniere boucle while et il me renvoie une liste vide ?
Si tu as mis le print après la boucle while, c'est normal, car tu ne sors de la boucle que lorsque la liste est vide.
Sinon, montre exactement ce que tu as fait.
Hors ligne
#7 Le 10/03/2019, à 17:04
- piter42
Re : "RESOLU" blocage script python
#!/usr/home/programmation/env python3
# -*- coding = utf-8 -*-
def encodage():
# renvoie la liste des entrées ou une liste vide
print("veuillez entrer des valeurs ou <inter> pour quitter :")
while 1 : # condition de la boucle
nom = input("nom : ")
if nom == "":
return[]
prenom = input("prénom : ")
adresse = input("adresse : ")
cpostal = input("code postal : ")
ntel = input("n° de tel : ")
print(nom,prenom,adresse,cpostal,ntel)
verif = input("si ok <inter> sinon <n>")
if verif == "":
break
return[nom,prenom,adresse,cpostal,ntel]
print(encodage())
# enregistrer avec '*' en début de mots
def enregistrer(liste):
f.write("*".join(liste))
f.write("\n") # caractère fin de ligne
nomf = input("nom fichier destinataire: ")
f = open(nomf,"a")
while 1:
tt = encodage()
if tt == []:
break
enregistrer(tt)
print(tt)
f.close()
Hors ligne
#8 Le 10/03/2019, à 17:16
- pingouinux
Re : "RESOLU" blocage script python
while 1: tt = encodage() if tt == []: break enregistrer(tt) print(tt)
C'est ce que je t'ai expliqué en #6 : tu ne sors de la boucle while que lorsque la liste tt est vide.
Si tu veux voir quelque chose, il faut mettre le print dans la boucle. Par exemple
while 1:
tt = encodage()
print(tt)
if tt == []:
break
enregistrer(tt)
Hors ligne
#9 Le 10/03/2019, à 19:42
- piter42
Re : "RESOLU" blocage script python
bonsoir pingouix,
j ai testé et ça me renvoie toujours une liste vide ?
Hors ligne
#10 Le 10/03/2019, à 20:12
- pingouinux
Re : "RESOLU" blocage script python
j ai testé et ça me renvoie toujours une liste vide ?
Tant que tu donnes des valeurs, la liste n'est pas vide, mais la dernière, correspondant à nom=="", le sera effectivement.
Dernière modification par pingouinux (Le 10/03/2019, à 20:14)
Hors ligne
#11 Le 10/03/2019, à 20:43
- Roschan
Re : "RESOLU" blocage script python
J'ai commenté mes modifications
#!/usr/bin/env python3
# -*- coding = utf-8 -*-
# Je ne sais pas à quel point ton système est anormal, mais théoriquement "/home"
# ne contient PAS les binaires des utilitaires systèmes comme `env`, et surtout
# ce n'est pas un sous-dossier de "/usr" !
# Le shebang correct pour l'exécution d'un script python3 est bien `#!/usr/bin/env python3`
def encodage():
# renvoie la liste des entrées ou None. None est conçu pour représenter
# l'absence de valeur, comme expliqué ici https://docs.python.org/3.2/library/constants.html
# Il est souvent une bonne idée d'utiliser dans son propre code des conventions semblables
# à celles du langage qu'on utilise : renvoyer une liste vide n'aurait de sens
# que si on y ajoutait quelque chose par la suite par exemple. Ici c'est juste pour
# tester le contenu de la variable : pourquoi allouer de la mémoire à une liste
# qu'on n'utilisera pas, alors qu'on peut renvoyer None ?
print("veuillez entrer des valeurs, ou <entrée> pour quitter :")
verif = "n"
while verif != "" : # condition de la boucle
nom = input("nom : ")
if nom == "":
return None
prenom = input("prénom : ")
adresse = input("adresse : ")
cpostal = input("code postal : ")
ntel = input("n° de tel : ")
print(nom, prenom, adresse, cpostal, ntel)
verif = input("si c'est ok <entrée>, sinon <n>")
return [nom, prenom, adresse, cpostal, ntel]
# enregistrer avec '*' en début de mots
def enregistrer(liste):
# La boucle while s'utilise quand le nombre de tours à effectuer est
# inconnu. Ici, on sait qu'on va avoir autant de tours que d'éléments
# dans la liste. On pourrait faire
# for i in range(0, len(liste)):
# f.write(liste[i] + '*')
# Mais ce serait se compliquer la vie pour rien puisque Python propose la
# syntaxe suivante pour parcourir une liste :
for element in liste:
f.write(element + '*')
f.write("\n") # caractère fin de ligne
nomf = input("nom fichier destinataire : ")
f = open(nomf,"a")
while True: # Utiliser des types qui ont du sens aide beaucoup à la compréhension
# du code : une condition prend un booléen, pas un entier.
tt = encodage()
# C'est souvent une mauvaise idée de polluer le terminal avec des print dénués
# d'explications. On décrit donc ce qu'on va print :
print("Encodage pas encore écrit dans le fichier : " + str(tt))
if tt is None:
break
enregistrer(tt)
f.close()
Je l'exécute :
roschan@debian:~$ ./test.py
nom fichier destinataire : exemple.txt
veuillez entrer des valeurs, ou <entrée> pour quitter :
nom : Dupont
prénom : Jean
adresse : eeeeeeeeee eeee e eeee
code postal : 55555
n° de tel : 0000000000
Dupont Jean eeeeeeeeee eeee e eeee 55555 0000000000
si c'est ok <entrée>, sinon <n>
Encodage pas encore écrit dans le fichier : ['Dupont', 'Jean', 'eeeeeeeeee eeee e eeee', '55555', '0000000000']
veuillez entrer des valeurs, ou <entrée> pour quitter :
nom : ffffffffffffffffffff
prénom :
adresse :
code postal :
n° de tel :
ffffffffffffffffffff
si c'est ok <entrée>, sinon <n>n
nom :
Encodage pas encore écrit dans le fichier : None
roschan@debian:~$
Ici les print fonctionnent tous comme prévu. Le fichier exemple.txt contient bien :
Dupont*Jean*eeeeeeeeee eeee e eeee*55555*0000000000*
Dernière modification par Roschan (Le 10/03/2019, à 20:48)
Hors ligne
#12 Le 10/03/2019, à 20:48
- Compte supprimé
Re : "RESOLU" blocage script python
Bonsoir,
@piter42,
Je ne sais pas si tu connais pythontutor http://pythontutor.com/visualize.html#mode=edit .
Cet outil permet de visualiser l'exécution d'un code ligne par ligne.
C'est bien pratique pour 'voir' ce qui se passe...
#13 Le 11/03/2019, à 07:39
- pingouinux
Re : "RESOLU" blocage script python
Suite à mes réponses en #8 et #10 :
Si tu ne veux pas voir la dernière liste vide
while 1:
tt = encodage()
if tt == []:
break
print(tt)
enregistrer(tt)
Hors ligne
#14 Le 11/03/2019, à 10:51
- piter42
Re : "RESOLU" blocage script python
merci à tout les 3 pour votre aide précieuse,je regarde cela
Dernière modification par piter42 (Le 11/03/2019, à 11:02)
Hors ligne