1 2 3 4 5 6
| while 1:
mot=input("Dire: ")
f.write(mot)
if mot=='':
break
f.close() |
Le
break a lieu avant le
f.close() donc le fichier ne sera pas refermé.
1 2 3 4
| f=open('text2.txt','wb')
for oct in octets:
f.write("{}".format(str(oct)))
f.close() |
Le fichier est refermé à chaque tour de boucle, alors qu'il n'est ouvert qu'une seule fois. L'écriture échouera dés la 2e itération de la boucle.
Le but du fichier est, comme dit par les précédents posteurs, étrange ^^ Dans IDLE, une fois le script terminé, je tape :
1 2
| >>> type(octets)
<type 'str'> |
Donc la boucle de fin transforme chaque caractère texte en une chaine de caractère. Sauf qu'en Python, il n'y a pas de différences entre char et string comme on peut l'avoir dans d'autres langages. str(oct) et oct sont donc identiques, comme le montre le code suivant qui affichera toujours "Obvious" :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import os
print("Programme permettant de traduire une str en b.\n")
f=open('text2.txt','w')
while 1:
mot=raw_input("Dire: ") # remplacer par input si Python 3.x
f.write(mot)
if mot=='':
break
print "Jamais exécuté"
f.close()
f=open('text2.txt','rb')
octets=f.read()
f.close()
f=open('text2.txt','wb')
for oct in octets:
#f.write("{}".format(str(oct)))
if oct == str(oct) :
print "Obvious"
else :
print "Caché !"
f.close() |
A tout hasard, le lien suivant peut être utile :
http://sebsauvage.net/python/charsets_et_encoding.html
@+
PS : je n'ai pas rencontré l'erreur indiquée, mais je n'utilise pas Python 3...
Partager