Le problème vient de l'encodage : Vous avez créé un fichier texte depuis Sublime-text avec un encodage US-ASCII au lieu de utf-8 ou en latin-1 (ISO8859-1).Essayez de créer un fichier texte depuis un autre outil comme Notepad++ ou vous pouvez contrôler l'encodage et demander à travailler en utf-8 qui est le charset Unicode ('cf UnicodeDecodeError...) a utiliser par défaut.
J'ai un problème avec le chapitre [BONUS] Stockez des citations dans un fichier avec le module json du cours "Démarrez votre projet avec Python"
Quand je lance mon code j'ai le message d’erreur suivant :
Traceback (most recent call last): File "E:\Openclassrooms\Doc externe python\Générateur de citation\SanAntonio.py", line 50, in <module> print(message(random_character(), get_random_item(quotes))) File "E:\Openclassrooms\Doc externe python\Générateur de citation\SanAntonio.py", line 37, in random_character all_values = read_value_from_json() File "E:\Openclassrooms\Doc externe python\Générateur de citation\SanAntonio.py", line 22, in read_value_from_json data = json.load(f) File "C:\Users\geeki\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 299, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "C:\Users\geeki\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 354, in loads return _default_decoder.decode(s) File "C:\Users\geeki\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\geeki\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 357, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 9 column 1 (char 222)
Et voici le code utilisé
# -*- coding: latin-1 -*-
import random
import json
quotes = [
"Ecoutez-moi, Monsieur Shakespeare, nous avons beau être ou ne pas être, nous sommes !",
"On doit pouvoir choisir entre s'écouter parler et se faire entendre."
]
characters = [
"alvin et les Chipmunks",
"Babar",
"betty boop",
"calimero",
"casper",
"le chat potté",
"Kirikou"]
def read_value_from_json():
values = []
with open("characters.json") as f:
data = json.load(f)
for entry in data:
values.append(entry["character"])
return values
def get_random_item(my_list):
rand_numb = random.randint(0, len(my_list) - 1)
item = my_list[rand_numb] # get a quote from a list
return item # return the item
def capitalize(words):
for word in words:
word.capitalize()
def random_character():
all_values = read_value_from_json()
return random_item_in(all_values)
def message(character, quote):
capitalize(character)
capitalize(quote)
return "{} a dit : {}".format(character, quote)
user_answer = input('Tapez entrée pour connaître une autre citation ou B pour quitter le programme.')
while user_answer != "B":
print(message(random_character(), get_random_item(quotes)))
user_answer = input('Tapez entrée pour connaître une autre citation ou B pour quitter le programme.')
Je ne travaille pas sur Mac et je ne peux pas être affirmatif sur ce qui existe en termes d'éditeurs de texte lesquels enregistrentnativement en utf-8...Tous le monde est censé le faire et des années apręs l'arrivée d'unicode, on a toujours des problème de 'legacy' ...il faut trouver un éditeur qui permette de changer le charset/ le jeu de caractères en utf-8. Sublime text (https://www.sublimetext.com) doit enregistrer nativement en utf-8 et il est disponible sous OSX 10.7 ou ultérieur. Idem pour brackets (http://brackets.io).
Dans le cours j'en suis au chapitre 6 au niveau des références et de id() et de is
Je ne comprends pas : Est ce que la références est le résultat de id() ?
si je fais :
>>> ma_liste1 = [1, 2, 3]
>>>
>>> ma_liste2 = ma_liste1
>>>
>>> print(id(ma_liste1))
3071861964
>>> print(id(ma_liste2))
3071861964
>>>
>>> if id(ma_liste1) is id(ma_liste2):
... print("YES id avec is")
... else:
... print("NO id avec is")
...
NO id avec is
>>>
>>>
>>>
>>> if id(ma_liste1) == id(ma_liste2):
... print("YES id avec ==")
... else:
... print("NO id avec ==")
...
YES id avec ==
>>>
Donc le résultat de id( ) est le même pour les deux listes !
Dans le cours il est écris que is compare les id des objets de part et d'autre de is ! OK les id () ne sont il s pas les mêmes puisque il y a :
Exact, is compare les identifiants de deux objets, mais ce n'est pas à toi d'utiliser la fonction id (is le fait automatiquement):
if ma_liste1 is ma_liste2: #équivalent à id(ma_liste1) == id(ma_liste2):
Avec ton code, tu ne compares pas l'id de ta liste MAIS l'id du nombre renvoyé par la fonction id :
nb1, nb2 = id(ma_liste1), id(ma_liste2)
print(id(nb1), id(nb2))) #voilà ce que tu compares en réalité
#Et donc la comparaison devient fausse:
if id(ma_liste1) is id(ma_liste2)
PS: Un bon point pour avoir utilisé le formatage de code du site mais la prochaine fois n'insère pas les >>> et les ... stp car il faut nettoyer le code avant de pouvoir l'exécuter. Juste faire:
ma_liste1 = [1, 2, 3]
ma_liste2 = ma_liste1
print(id(ma_liste1)) #3071861964
print(id(ma_liste2)) #3071861964
if id(ma_liste1) is id(ma_liste2):
print("YES id avec is")
else:
print("NO id avec is")
LanoueC a écrit:
> Je ne comprends pas : Est ce que la références est le résultat de id() ?
Non. La référence est l'objet. Il n'y a pas de différence entre les deux concepts en Python.
Tout objet est une référence vers un emplacement mémoire.
Le nombre renvoyé par id correspond à l'adresse de cet emplacement mémoire.
Deux objets qui partagent un même id (un même emplacement mémoire) sont donc nécessairement le même objet.
Alors, dans ton cas, les nombres renvoyés par id(ma_liste1) et id(ma_liste2) sont égaux (id(ma_liste1) == id(ma_liste2).
Le problème est que tu testes l'égalité entre ces deux nombres avec is, qui n'est pas fait pour cela.
Ce que tu fais revient à écrire id(id(ma_liste1)) == id(id(ma_liste2)), ce qui peut être vrai pour des nombres égaux, mais sur lequel il ne faut généralement pas compter. Dans ton cas, les nombres sont égaux mais des instances différentes d'int.
J'en suis au pendu, c'est donc le troisième TP que je fais, sans avoir aucuns avis sur mes codes. Je me suis dit que je suis peut être en train de prendre des mauvais plis et que si c'est le cas, j'ai besoin qu'on me le dise.
Si je demande ça c'est que quand j'ai fini mon pendu, je me suis retrouvé avec ce programme:
# -*-coding:Utf-8 -*
"""jeu du pendu dans le quel le joueur a 8 chances pour trouver un mot"""
import os
from fonction import *
os.system('cls')
joueur()
produire_mot()
corps_du_jeu()
non, non ce n'est pas une blague: 9 lignes et tout ce passe dans les fonctions.
Avant tout il faut que je vous dise, il y a fort longtemps, j'étais au lycée et j'avais une calculatrice scientifique TI-83 sur la quelle je faisais quelques programmes sympas (dans la limite des possibilités) et je me souviens de deux "fonctions" qui étaient Lbl+clé (chiffres ou lettres) et goto+clé. le Lbl était fait pour marquer un endroit et le goto pour envoyer le programme à cette endroit là.
Là en programmant mon pendu mes vieux réflexes de lycéens sont remontés à la surface et je me suis mis, sans vraiment m'en rendre compte au début, à utiliser les fonctions() python comme des Lbl et goto.
Du coup à la fin de corps_du_jeu() je renvois à la fonction menu() qui elle laisse trois choix: quitter, continuer avec le même joueur ou changer de joueur. selon le choix j'appelle différentes fonctions.
Donc: suis-je en train de prendre de mauvaise plis? où est-ce une façon normale de tracer un chemin que suivrait le programme?
J'ai une question sur le programme à faire (Roboc en multijoueur) :
Le programme client doit à la fois attendre les commandes du joueur avec la fonction input() et à la fois afficher les messages reçus du serveur.
Alors j'ai créé une classe Ecoute qui hérite de threading.Thread
Le problème c'est que quand je dois afficher un message reçu du serveur il me l'affiche en plein milieu du input(">") Je ne sais pas si je suis très clair... Je vous met un exemple :
Connexion établie avec le serveur sur le port 12800
> Un nouveau joueur vient d'arriver : 1 joueur(s) connectés
1 - Je lance le client 2 - Il me dit "Connexion établie blabla" 3 - j'arrive sur mon appel à input(">") 4 - Il m'affiche le message reçu du serveur : "Un nouveau joueur blabla" 5 - Le curseur de saisie est maintenant décalé sous la ligne
jai telecharger la version python 3.6.3 Shell, en essayant de vous suivre il ya des choses quine fonctionnent pas je comprend pas pourquoi. en voici un exemple
J'ai un problème avec le chapitre [BONUS] Stockez des citations dans un fichier avec le module json du cours "Démarrez votre projet avec Python"
Quand je lance mon code j'ai le message d’erreur suivant :
Traceback (most recent call last): File "E:\Openclassrooms\Doc externe python\Générateur de citation\SanAntonio.py", line 50, in <module> print(message(random_character(), get_random_item(quotes))) File "E:\Openclassrooms\Doc externe python\Générateur de citation\SanAntonio.py", line 37, in random_character all_values = read_value_from_json() File "E:\Openclassrooms\Doc externe python\Générateur de citation\SanAntonio.py", line 22, in read_value_from_json data = json.load(f) File "C:\Users\geeki\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 299, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "C:\Users\geeki\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 354, in loads return _default_decoder.decode(s) File "C:\Users\geeki\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\geeki\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 357, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 9 column 1 (char 222)
Et voici le code utilisé
# -*- coding: latin-1 -*-
import random
import json
quotes = [
"Ecoutez-moi, Monsieur Shakespeare, nous avons beau être ou ne pas être, nous sommes !",
"On doit pouvoir choisir entre s'écouter parler et se faire entendre."
]
characters = [
"alvin et les Chipmunks",
"Babar",
"betty boop",
"calimero",
"casper",
"le chat potté",
"Kirikou"]
def read_value_from_json():
values = []
with open("characters.json") as f:
data = json.load(f)
for entry in data:
values.append(entry["character"])
return values
def get_random_item(my_list):
rand_numb = random.randint(0, len(my_list) - 1)
item = my_list[rand_numb] # get a quote from a list
return item # return the item
def capitalize(words):
for word in words:
word.capitalize()
def random_character():
all_values = read_value_from_json()
return random_item_in(all_values)
def message(character, quote):
capitalize(character)
capitalize(quote)
return "{} a dit : {}".format(character, quote)
user_answer = input('Tapez entrée pour connaître une autre citation ou B pour quitter le programme.')
while user_answer != "B":
print(message(random_character(), get_random_item(quotes)))
user_answer = input('Tapez entrée pour connaître une autre citation ou B pour quitter le programme.')
Merci d'avance si quelqu'un a la solution
Bonjour, j'ai exactement le même souci, quelqu'un aurait-il une solution s'il vous plaît ?
Quand tu essaieras d'accéder à l'attribut longitude d'un objet, Python saura que c'est une propriété et exécutera la méthode associée, qui s'occupe de récupérer l'attribut longitude_degrees.
J'avance progressivement dans le cours "Apprenez à programmer en Python", je suis bloqué par un des exemples qui me renvoie un message d'erreur que je n'arrive pas à debugger.
>>> prenom = "Paul"
>>> nom = "Dupont"
>>> print("Je m'apelle {0} [1} et j'ai {2} ans.".format(prenom, nom, age))
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
print("Je m'apelle {0} [1} et j'ai {2} ans.".format(prenom, nom, age))
ValueError: Single '}' encountered in format string
Je suspectai un "pb" avec la variable age, j'ai donc tenté avec
Bonjours! Ceci est très urgent! (avant ce soir 23h)
Il s'agit d'un exercice permettant de réviser les tables de multiplication. On choisit le nombres de questions, on répond, et ça nous dit si c'est vrai ou faux avec la correction. A la fin il y a le temps mis pour faire l'exercice complet. Cependant j'aimerai mettre un temps limité pour répondre à chaque question. Help !!!
import random as r
n=int(input('Combien de questions voulez vous?'))
Score=0
import time
debut=time.clock()
for k in range(0,n):
print()
print()
a=r.randrange(1,10)
b=r.randrange(1,10)
z=a*b
print(a,'x',b)
reponse=int(input('Votre réponse = '))
if reponse==z:
v=True
Score= Score + 1
print()
m=input('Voulez vous le corigé?')
if m=='oui':
print(v)
print('Corrigé: Réponse = ',z)
else:
f=False
print()
m=input('Voulez vous le corigé?')
if m=='oui':
print(f)
print('Corrigé: Réponse = ',z)
print()
print('Score = ',Score,'/',n)
fin=time.clock()
duree=fin
print('Temps pour faire ensemble des questions =',duree,'sec')
Dans la correction du exercice ZCASINO a la fin on teste seulement s'il veut quitter il tape "o" ou "O" mais pas le reste.
normalement utilisateur doit taper "n" ou "N" pour rejouer . mais dans cette solution qu'il tape k ou f ou ...etc. le programme recommence par défaut il ne prend pas en considération une erreur de saisie de la part de l'utilisateur. est-ce-que c'est normale ?
Dans ce cas précis, ça ne sert à rien de restreindre la saisie utilisateur s'il veut rejouer. La seule chose qu'on lui demande, c'est d'être précis s'il veut quitter le jeu. Pour le reste, qu'il tape "n", "non", "j'ai envie de continuer, merci bien" ou encore "", ça sera interprété comme une volonté du joueur de vouloir continuer le jeu.
Après libre à toi de rajouter la condition si tu la juges importante (après tout ce n'est qu'un exemple de correction)
Dans ce cas précis, ça ne sert à rien de restreindre la saisie utilisateur s'il veut rejouer. La seule chose qu'on lui demande, c'est d'être précis s'il veut quitter le jeu. Pour le reste, qu'il tape "n", "non", "j'ai envie de continuer, merci bien" ou encore "", ça sera interprété comme une volonté du joueur de vouloir continuer le jeu.
Après libre à toi de rajouter la condition si tu la juges importante (après tout ce n'est qu'un exemple de correction)
d'accord d'accord comme vous dite c'est qu'un exercice. l'important est de bien comprendre le tout
Je suis dans un exercice sur les listes et tuples et je suis bloqué sur un élément (ligne 17 et 18)
def afficher(*parametres, sep=' ', fin='\n'):
"""Fonction chargée de reproduire le comportement de print.
Elle doit finir par faire appel à print pour afficher le résultat.
Mais les paramètres devront déjà avoir été formatés.
On doit passer à print une unique chaîne, en lui spécifiant de ne rien mettre à la fin :
print(chaine, end='')"""
# Les paramètres sont sous la forme d'un tuple
# Or on a besoin de les convertir
# Mais on ne peut pas modifier un tuple
# On a plusieurs possibilités, ici je choisis de convertir le tuple en liste
parametres = list(parametres)
# On va commencer par convertir toutes les valeurs en chaîne
# Sinon on va avoir quelques problèmes lors du join
for i, parametre in enumerate(parametres):
parametres[i] = str(parametre)
# La liste des paramètres ne contient plus que des chaînes de caractères
# À présent on va constituer la chaîne finale
chaine = sep.join(parametres)
# On ajoute le paramètre fin à la fin de la chaîne
chaine += fin
# On affiche l'ensemble
print(chaine, end='')
Pourquoi un [i] ? D'où il vient ? A quoi il sert ?
2e question, même page (oui, elle me pose des sacrés problèmes ^^)
# On change le sens de l'inventaire, la quantité avant le nom
inventaire_inverse = [(qtt, nom_fruit) for nom_fruit,qtt in inventaire]
# On n'a plus qu'à trier dans l'ordre décroissant l'inventaire inversé
# On reconstitue l'inventaire trié
inventaire = [(nom_fruit, qtt) for qtt,nom_fruit in sorted(inventaire_inverse, \
reverse=True)]
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
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