Tu essayes de compiler Python 3 manuellement ? Il ne faut pas faire ça, installe directement python3 à l'aide de ton gestionnaire de paquets (apt je suppose) : sudo apt-get install python3.
Salut entwanne. En faite, j'ai suivis exactement l'installation du cours. Mais hier, en faisant plus de recherches, j'ai vu qu'il fallait taper : "python3" pour pouvoir travailler avec le 3 et pas avec le 2. Et donc pour compiler mon fichier sur le terminale, je met : "python3 +lenom_du_fichier"
Merci encore cher ami du python !
- Edité par Dalila Hannouche 19 décembre 2017 à 9:34:47
On ne parle pas de la même compilation. Je trouve bizarre que tu aies un dossier Python-3.6.3, qui semble indiquer que tu as téléchargé les sources de CPython, ce qui n'est pas nécessaire pour l'utiliser (mais qui est très instructif à lire).
Dans Geany, la version de Python utilisée se configure (Menu Construire > Définir les commandes de construction).
Et sinon, tu peux toujours utiliser le terminal intégré.
On ne parle pas de la même compilation. Je trouve bizarre que tu aies un dossier Python-3.6.3, qui semble indiquer que tu as téléchargé les sources de CPython, ce qui n'est pas nécessaire pour l'utiliser (mais qui est très instructif à lire).
Dans Geany, la version de Python utilisée se configure (Menu Construire > Définir les commandes de construction). Et sinon, tu peux toujours utiliser le terminal intégré.
Oui Justement, j'avais trouvé la solution pour Geany ! D'où la modification de mon message précédent. C'est vraiment sympa d'avoir pris le temps de m'aider. Je n'ai plus qu'à continuer le cours maintenou *toute contente.
j'ai créé un fichier test_labyrinthe.py sensé tester les methodes de la classe Labyrinthe dans le rep pack_labyrinthe
#!/usr/local/bin/python3.6
# -*-coding:Utf-8 -*
from unittest import *
from labyrinthe import *
class TestLab(TestCase):
def test_chargeLab(self):
lab = Labyrinthe("facile.txt")
listLignes = lab.__readLab("facile.txt")
self.assertTrue(type(listLignes) == list)
code de la methode testée :
@staticmethod
def __readLab(nomFich):
"""Charge le fichier texte dont le nom est en arg.
Renvoie une liste contenant le labyrinthe"""
with open("./cartes/"+nomFich, 'r') as fich:
listLignes = fich.readlines()
return listLignes
Depuis la console python dans le rep. pack_labyrinthe je lance unittest.main()
j'ai l'erreur suivante :
with open("./cartes/"+nomFich, 'r') as fich:
FileNotFoundError: [Errno 2] No such file or directory: './cartes/facile.txt'
ce qui parait logique puisque le répertoire depuis lequel est appelé cette méthode est celui de roboc.py càd le rep. racine du projet,le fichier a donc le path
./cartes/facile.txt
je cherche donc à lancer le test depuis la racine avec unittest.main() et j'ai l'erreur :
ERROR: test_chargeLab (__main__.TestLab)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/patrick/Bureau/Python/labyrinthe/monLabyrinthe_II/pack_labyrinthe/test_labyrinthe.py", line 11, in setUp
listLignes = lab.__readLab("facile.txt")
AttributeError: 'Labyrinthe' object has no attribute '_TestLab__readLab'
C'est quoi
_TestLab__readLab'
????
cela devrait être lab.__readLab la methode de l'obj que j'ai créé : lad de la classe Labyrinthe ... avec lab = Labyrinthe()
#!/usr/local/bin/python3.6
-*-coding:Utf-8 -*
import unittest
from pack_labyrinthe.labyrinthe import *
class TestLab(unittest.TestCase):
def setUp(self):
self.nomFile = "facile.txt"
self.lab = Labyrinthe(self.nomFile)
# RàZ listRobot si non conservé d'un test à l'autre
# créant des erreurs
self.lab.listRobot = list()
def test_ajoutRobot(self):
nom = "toto"
self.assertTrue(len(self.lab.listRobot) == 0)
self.lab.ajoutRobot(nom)
self.assertTrue(len(self.lab.listRobot) == 1)
self.assertTrue(self.lab.listRobot[0].nom == "toto")
sauve le fichier test sur le répertoire racine et le lancer depuis celui-ci. Il n'y a plus de problème de dépendance ou de path.
[~/Bureau/Python/labyrinthe/monLabyrinthe_II]$ ./test_labyrinthe.py
.....
----------------------------------------------------------------------
Ran 5 tests in 0.002s
OK
Par contre il est impossible de tester directement les fonctions en __nomFonction() et c'est normale en y réfléchissant, la tête froide ..., puisque le "__" les rends en quelque sorte privée à la classe.
J'avoue que ces foutus tests je m'en serais bien passé ...Et le cours est léger la-dessus, il aurait fallu 2 chapitres amha !
Je n'en peux plus de ce labyrinthe
- Edité par Triple Zero 23 décembre 2017 à 22:49:51
Je suis sur le Tp du Pendu , j'ai fait le jeu qui fonctionne sous l'interpreteur mais je souhaite le lancer pour continuer a le corriger. Probléme , je n'arrive pas a le lancer la fenêtre se fenetre immédiatement et je n'arrive pas à detecter l'erreur ni l'exception qui est levé. c'est pour cela que j'en apelle a votre aide :
le dossier principal:
""" Jeu de Pendu """
from Fonction_PenduTp import *
from Donnees_PenduTp import *
import os
import pickle
import random
print("*** BIENVENUE AU PENDU GAME *** \n ")
print("Vous pouvez consulter les regles du jeu tapez : 1")
Regles=lireInt()
if Regles == 1 :
ReglesPendu()
print("Quels votre nom ?\n")
nomJ=lireStr()
Score=Score_Joueur.setdefault( nomJ,0 ) #module de dictionaire qui verifie si le nom existe et le cree dans le cas contraire ...
print("{} votre score actuel est de : {} points\n ".format( nomJ,Score ))# par defaut incris une valeur
mots=GenerationMots()
motCach=maquilMot( mots )
print ("Voici le mots mystére : {} :)\nVous avez {} chance pour le trouver".format( motCach,coup ))
while tour ==0 :
print("{} c'est à vous de jouer ecrivez une lettre ".format( nomJ ))
ltr=lireStr()
motCach,point=ctrlCarac( motCach,mots,ltr )
if motCach==mots :
print("\n Excelent vous gagner !! il y a : {} {} dans {} \n".format( point,ltr,motCach ))
tour=1
elif point >0 :
print("\n Bravo !! il y a : {} {} dans {} \n".format( point,ltr,motCach ))
elif coup<=0 :
print(" Vous avez perdu!! ")
tour=1
else :
coup-=1
print(" {} n'est pas dans le mots Mystere !!! \n".format( ltr ))
print(" votre score est de {} il seras enregeistré pour la prochaine fois ".format( coup ))
Score_Joueur={nomJ:coup+Score}
sauv(Score_Joueur)
les données :
""" donnees du jeu """
coup=8
tour=0
with open('Bibliotheque2.txt')as f :
contenu=f.read()
list_mots=contenu.split('\n')
f.close()
Score_Joueur=restaure()
Et les Fonction :
""" Fonction du jeu Pendu """
import os
import pickle
import random
def lireInt() :
""" Fonction qui a pour but de securiser les Entrer de chiffre
de l'utilisateur
"""
try :
nB=int(input("Entrez un chiffre...: ")) #convertie en int nb
return nB #conversion possible il le renvoi
except ValueError : #convertion impossible erreur de valeur
print("Vous n'avez pas saisie de chiffre\n")
return lireInt() #on rapelle la fonction
def ReglesPendu() :
""" Fonction qui ennonce les regles du jeu
"""
print("""l'ordinateur choisit un mot au hasard
dans une liste, un mot de huit lettres maximum.
Le joueur tente de trouver les lettres composant
le mot. À chaque coup, il saisit une lettre. Si la
lettre figure dans le mot, l'ordinateur affiche
le mot avec les lettres déjà trouvées. Celles qui ne
le sont pas encore sont remplacées par des étoiles
. Le joueur a 8 chances. Au delà, il a perdu.""")
def lireStr() :
""" Fonction a pour role de verifier qu'il n'y a pas que des chiffres dans la chaine
"""
chaine=input( "Ecrivez...: " )
if chaine.isdigit() == True : # Module intérresesant vérifie qu'il n'y a pas que des chiffres ou decimal retourne vrai ou faux
print("il n'y a que des chiffres!!")
return lireStr()
else :
return chaine.strip() # retourne la chaine sans espace avant et apres
def GenerationMots() :
""" fonction va chercher un mots aleatoirement dans le dictionaire et le renvoi
"""
nB=random.randrange( 1,len(list_mots) ) # cherche un n° en fonction de la longeur de la liste
return list_mots[nB]
def maquilMot(mots) :
"""fonction qui maquille les mots en fonction de la taille du mots trouvé
"""
motsMys=[]
for i in mots :
motsMys.append('X')
return ''.join(motsMys)
def ctrlCarac ( motsMys,mots,ltr ) :
"""fonction cree une liste afin de modifier les caractere souhaite a la place voulu
retourne le nombre de lettre trouve et le mots mystere modifier
"""
ltrU=ltr.upper() # on modifie la lettre pour toujour avoir la meme reference
p=0 # compteur de point
motsM=[]
for i in (motsMys) : # on remplit la liste
motsM.append(i)
for i,c in enumerate(mots) : # on enumere le mots a la recherche des caracteres et de leur place
if c == ltrU :
motsM[i]= ltrU # on modifie la liste
p+=1
motsMys=''.join(motsM) # on reasemble le mots Mystere
return motsMys,p
def sauv( score ) :
fsauv=open('Score','wb')
pickle.dump( score,fsauv )
fsauv.close()
def restaure () :
score={}
try :
f=open('Sre','rb')
score=pickle.load( f )
f.close()
except FileNotFoundError : # si le fichier na pas etait cree on passe l'erreur
pass
finally :
return score
Je suppose que tu es sous windows, la console se ferme à la fin de l'exécution.
Comment lances-tu ton programme ?
Si tu double clique sur le fichier depuis l'explorateur cela me parait normal.
Il faut aller chercher dans système windows l'invite de commandes qui ouvre une console
aller dans le bon répertoire avec cd
rentrer le nom du fichier.py et return
N'étant pas sous windows je ne peux pas t'en dire plus ...
Bonjour ,
Merci , je fait effectivement un double clic , je pense avoir circonscris mon problème quand je passe mon :
"""from Fonction_PenduTp import *
from Donnees_PenduTp import *"""
Cela fonctione ( j'ai mis le programme en pause juste avant l'appel de fonction ).Mais je n'arrive pas a comprendre pourquoi cela pose un problème . d’ailleurs j’ai même essayer d'importé un fichier vide c'est la même je dois mal m'y prendre
Merci
- Edité par 64fauchenicolas 23 décembre 2017 à 13:28:48
Je suis en train d apprendre le langage python, je ne connais pas un autre langage donc comprenez que je suis vraiment novice dans l'affaire.
Voila , pourriez vous m aidez a comprendre ou a corriger ce bout de code s'il vous plait, ce code engendre une table de multiplication que l utilisateur va déterminer le nb au début mais je n arrive pas a avoir le résultat
nb = input("saisissez un chiffre : ")
# L'utilisateur
i = 0 # C'est notre variable compteur que nous allons incrémenter dans la boucle
while i < 10: # Tant que i est strictement inférieure à 10
print(i + 1, "*", nb, "=", (i + 1) * nb)
i += 1 # On incrémente i de 1 à chaque tour de boucle
escompter cad le resultat de la multiplication n est pas juste
Merci pour l intérêt que vous portez a mon problème mais si vous avez bien lu je ne suis qu un débutant essayez s'il vous plait de me donner des explications a mon niveau for et range je ne sais pas encore les utiliser
voici le résultat que j obtient en lançant le code
Mon terminal me signale une erreur d'indentation dans le code suivant, mais je ne la trouve pas. Pourriez-vous m'éclairer?
def show_random_quote (my_list): # select random number from 0 to 8 quote = my_list[0] print (quote)
Par avance merci!
Posté le lendemain:
Merci Triple Zero pour ta réponse rapide, mais j'ai trouvé d'où venait le problème: ce n'est en fait pas un problème d'indentation (contrairement à ce que prétendait le message d'erreur), mais il manquait un pass à la fin de la condition que j'avais écrite juste avant. Du coup, Python, en arrivant à ce paragraphe, pensait encore se trouver dans le else:
Syntaxe, quand tu ne nous joues pas de tours, tu nous en joues quand même!
In [1]: def show_random_quote (my_list):
...: # select random number from 0 to 8
...: quote = my_list[0]
...: print (quote)
...:
In [2]:
Je n'ai pas d'erreur d'indentation sur ton code sur ipython3
Normalement les indentations sont de 4 caractères, ton indentation est de 2 car est-ce suffisant pour lever une erreur je ne sais pas. Paramètre ton éditeur pour que les tab soient converties en 4 car et essaie ton code.
Perso j'utilise wing ou atom, un bon éditeur spécialisé python te sera utile pour le dernier exercice labyrinthe 2ème version ...
Actuellement sur le TP casino, je rencontre un petit soucis dans ma fonction.
Jusqu'à que je rajoute la partie de vérification de la case sur laquelle le joueur mise(Second while) le programme fonctionnait correctement. une fois implem, rien à faire le programme ne tourne plus, le soucis est que aucune erreur n'est renvoyer donc je sais pas trop comment faire.
Il y a peut être une notion évidente que je n'ai pas qui fait que ça ne fonctionne pas mais là je cherche et je trouve rien.
import os
from random import randrange
from math import ceil
kopec = 500
print(" Bienvenue au Zcasino")
print("qu'elle est votre nom ? :")
nom = input()
print("Bonjour", nom,"vous disposer de 500 kopec pour jouer à la roulette")
def roulette():
global kopec
mise = 0
gain = 0
miseC = 2 #Variable de la case d'atterissage de la bille
while True:
try:
mise = int(input("Combien désirez vous miser ? :"))
assert mise <= kopec #Verif que le montant ne dépasse pas la somme possédé
break
except ValueError:
print("Ce n'est pas un montant !")
except AssertionError:
print("Soyez raisonnable ! Vous n'avez pas ce montant !")
while True:
try:
miseC = int(input("Sur quel case ? (Choisir un chiffre entre 0 et 49)")
assert miseC <= 49, miseC >= 0 #Verif que le chiffre choisi correspond bien à ceux de la roulette
break
except ValueError:
print("On joue au même jeux ? Un chiffre je vous prie")
except AssertionError:
print("Ce chiffre n'est pas sur la roulette.. Boloss")
print("C'est partie pour une mise de ", mise," sur la case",miseC,"!")
kopec = kopec - mise
tir = randrange(50)
print("Tac tac tac tac tac tac \n Tac tac tac \n Tac tac... \n TaK !")
roulette()
Les assertions ne sont pas à utiliser dans le code, elles servent juste dans les phases de tests.
Il faut donc les remplacer par une autre forme (par exemple un bloc if/else):
while True:
try:
mise = int(input("Combien désirez-vous miser: "))
except ValueError:
print("Ce n'est pas un montant valide!")
continue
if 0 < mise <= kopec:
break
else:
print("Soyez raisonnable! Vous n'avez pas ce montant!")
renvoie toujours un string, donc ta variable nb est une chaîne
plus bas tu exécutes par exemple
print(3 * nb)
en python une chaine multipliée par un entier x renvoie la chaine répétée x fois
print("az" * 5)
>>>'azazazazaz'
Pour obtenir une multiplication il faut utiliser 2 entiers !!! donc convertir la sortie de input de str -> int
- Edité par Triple Zero 31 décembre 2017 à 8:43:18
Merci beaucoup votre pour la réponse et j ai compris d'ou vient mon erreur, mais comment convertir la sortire de input de str -> int ?
Merci d avance.
Bon j ai du relire le cours du début, jusqu’à cet exercice et j ai trouvé comment convertir la sortie de input de str -> int
nb = int(input("saisissez un chiffre : ")) # L'utilisateur
i = 0 # C'est notre variable compteur que nous allons incrémenter dans la boucle
while i < 10: # Tant que i est strictement inférieure à 10
print(i + 1, "*", nb, "=", (i + 1) * nb)
i += 1
Je ne suis pas bien loin mais j'ai un problème au premier cours de la deuxième partie de python.
J'enregistre mon fichier par Sublimetext
Et là le problème se pose, comment l'ouvrir avec Python ? Je suis sous windows 10.
Je ne trouve pas le " run module " mentionné dans les explications écrites, j'ai bien un " open module " sur mon IDLE mais il ne trouve pas mon fichier. J'ai essayé donc d'employer le simple " open ", il me l'ouvre mais en fichier texte.
Sous Window 10 tu as la possibilité de faire avec notepad++
Sinon simplement si tu as télecharger Python tu marque dans ta barre de recherche "IDLE phython" tu tombe sur "le shell" qui permet de tester des bouts de code puis apres tu fait:
- new
- Tu fait ton code
- Enregistre et tu la possibilité de faire F5 pour l'executer et tester les bugs
- Edité par 64fauchenicolas 7 janvier 2018 à 15:14:47
J'ai trouvé la solution ! C'est en fait le fichier texte dont je parlais qui m'ouvre la possibilité de " run " le fichier et donc de l'employer dans Python.
Je suis débutant en Python et je rencontre un problème j'aurais besoin d'un petit peu d'aide !
(Je travaille sur un réseau sécurisé en entreprise, difficile de faire circuler des screenshots de code).
J'ai réalisé le premier programme concernant les années bissextiles, il s'exécute parfaitement bien sans le moindre problèmes.
Pour ce qui est de la table de multiplication, voici le code :
#! chemin_concerné # -*-coding:utf-8 -*
def table(nb, max):
i = 0
while i < max: print(i + 1, "*", nb, "=", (i + 1) * nb) i += 1
Voilà et l'erreur qu'il m'est retournée : "Badly placed ()'s." Je ne comprends pas, je suis persuadé que c'est un petit détail mais je n'arrive pas à mettre le doigt dessus...
@64fauchenicolas: Ton problème se situe en ligne 19. La méthode sort renvoie None (car elle fait le tri sur la liste même et donc n'en renvoie pas une nouvelle). Il suffit juste de retirer l'affectation et de simplement garder la partie à droite :
self.floor = []
for cls in dict_f.keys() :
self.floor.append(cls)
self.floor.sort()
@64fauchenicolas: Ton problème se situe en ligne 19. La méthode sort renvoie None (car elle fait le tri sur la liste même et donc n'en renvoie pas une nouvelle). Il suffit juste de retirer l'affectation et de simplement garder la partie à droite :
self.floor = []
for cls in dict_f.keys() :
self.floor.append(cls)
self.floor.sort()
Quel est l'algorithme qui permet de damander: les coordonnées de 4points (8valeurs) ABCD. Le programme doit déterminer si oui ou non la quadrilatère? EN Python 3
Tu récupères les coordonnées des 4 points (input), et tu vérifies qu'ils sont tous distincts les uns des autres (ça se fait bien avec un set).
Edit : Ah, j'oubliais l'alignement des points. Pour chaque triplet de point, tu vérifies qu'ils ne sont pas alignés (par inégalité triangulaire par exemple).
Dans l'exercice de code de la séquence Organisez en module du cours perféctionnez vous en python l'intitulé est :" Réorganisez ce projet pour qu'il contienne un module translations contenant un fichier pour le français et un pour l'anglais. Importez-le dans le fichier main.pypour l'utiliser correctement."
Ne serait-il pas plus clair de réorganiser le projet pour qu'il contienne une librairie translations ?
D'autre part comment accéder à une correction pour ces exercices ?
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
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique