Je débute mon apprentissage Python (et plus généralement, je suis complètement débutant en développement info).
Je travaille sur le projet San Antonio du cours "Démarrez votre projet Python" et j'ai essayé un code alternatif à la réponse proposé qui ne fonctionne pas. Celui-ci est moins "smart" que le corrigé du cours, mais, je souhaiterais tout de même comprendre pourquoi ça ne marche pas et surtout pourquoi mes variables RandomC et RandomQ sont "Undefined" ...
Si vous pouvez m'aider, ce serait top !!!
Merci bcp
<pre class="brush: python;">
import random
Quotes = ["Tu ne l'emporteras pas au paradis", "Tant va la cruche à l'eau qu'à la fin elle se casse", "Les plus faibles ont toujours tort", "Qui vivra verra", "Un tien vaut mieux que 2 tu l'auras"]
Characters = ["San Antonio", "felicie", "Antoine", "césar", "Mathias"]
def message(character, quote):
n_character =character.capitalize()
n_quote = quote.capitalize()
return "{} a dit : {}".format(n_character, n_quote)
def RandomQuotes():
RandomQ = random.randint(0,len(Quotes))
return RandomQ
def RandomChar():
RandomC = random.randint(0,len(Characters))
return RandomC
MainVar= input("Appuyez sur Entrée pour avoir une citation et un personnage de San Antonio; Appuyez sur E pour terminer le programme")
while MainVar != "E" :
RandomQuotes()
RandomChar()
print(message(Characters[RandomC], Quotes[RandomQ]))
</pre>
Tes variables sont déclarées au sein de fonction, et leur valeur est retournée par un return.
Mais la variable reste propre à la fonction qui la déclare et n'existe pas à l'extérieur.
Si tu veux conserver la valeur, il te faut assigner à une variable le retour de l'appel de la fonction, par exemple RandomQ = RandomQuotes().
J'ai créé une classe Personnage et j'ai enregistré les personnages créés dans un fichier excel. J'y suis parvenu mais je souhaitais savoir si il n'y avait pas une méthode plus simple. Voici le code :
class Personnage :
"""Classe définissant les personnages caractérisée par :
- son nom
- son prénom
- son âge """
instances =[] #permet d'enregistrer dans une liste chaque personnage créé
personnages_crees = 0 #compteur du nombre de personnages créés
def __init__(self, prenom, nom, age) :
"""Définition des attributs nom, prenom et âge"""
self.nom = nom.capitalize()
self.prenom = prenom.capitalize()
self.age = age
self.instances.append(self)
Personnage.personnages_crees +=1
def __repr__ (self) :
"""détails du personnage"""
return "Personnage: nom ({}), prénom ({}), âge ({}) ". format (self.nom, self.prenom, self.age)
def __str__(self):
return "{} {} {}" .format(self.prenom, self.nom, self.age)
import os
import xlrd
from xlwt import Workbook
from testclasses import *
#se place sur le répertoire de travail
os.chdir ("f:\philippe\logiciel_python\exercice")
#création d'un fichier excel, en xls avec entête
#des 3 premières colonnes
book = Workbook()
feuil1 = book.add_sheet('feuil1')
feuil1.write (0,0, 'prenom')
feuil1.write (0,1,'nom')
feuil1.write (0,2,'âge')
#création de personnages avec la classe Personnage
p1 = Personnage ("zilnok", "nogah", 22)
p2 = Personnage ("nirannor", "zilvan", 31)
# transfert des personnages sur la feuille excel
numero_ligne = 0
numero_colonne = 0
for obj in Personnage.instances :
ma_chaine = str(obj) #récupère personnage par personnage dans une chaine de caractères
ma_liste = ma_chaine.split(" ") # transforme cette chaine en liste
ligne1 = feuil1.row(numero_ligne + 1) #indique la ligne sur laquelle enregistrer le personnage
for el in ma_liste:
ligne1.write (numero_colonne, el) #enregistre chaque élément de la liste
numero_colonne +=1 #se décale d'une colonne
numero_ligne +=1 #se décale d'une ligne
numero_colonne = 0 #remet le compteur de la colonne à 0 pour le peronnage suivant
book.save ('test2.xls') #enregistre le fichier
Tes variables sont déclarées au sein de fonction, et leur valeur est retournée par un return. Mais la variable reste propre à la fonction qui la déclare et n'existe pas à l'extérieur.
Si tu veux conserver la valeur, il te faut assigner à une variable le retour de l'appel de la fonction, par exemple RandomQ = RandomQuotes().
Oui bonsoir ou bonjour , je réalise le 1er TP et je cherche à comprendre l'annexe "Écrire nos programmes Python dans des fichiers" et à un moment ça me dit de mettre #/fichier en haut du programme , sauf que je vois bien le >>> mais je ne peux rien écrire dedans alors merci de m'aider à comprendre ce dont il en retourne merci
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
=== RESTART: C:\Users\marin\Desktop\Programmes\Python\bonjour (bloc-notes).py ==
bonjour
>>> #Chemin commençant par C:..
>>> open(r'C:\Users\marin\Desktop\Nouveau dossier')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
open(r'C:\Users\marin\Desktop\Nouveau dossier')
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\marin\\Desktop\\Nouveau dossier'
>>> open(r'\Users\marin\Desktop\Nouveau dossier')
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
open(r'\Users\marin\Desktop\Nouveau dossier')
PermissionError: [Errno 13] Permission denied: '\\Users\\marin\\Desktop\\Nouveau dossier'
>>> open(
Voilà j'ai créé à partir du bloc-notes une ligne de programmation disant bonjour , j'ai changé l'extension en .py comme demandé dans l'annexe 1 et ensuite j'ai rouvert le fichier à partir donc de python , j'ai fait run module ou F5 et j'ai eu cette page . Y'a ce >>> en haut où je ne peux strictement rien écrire et ensuite de mettre le chemin . Apparemment c'est ce qu'on trouve dans les propriétés du fichier et j'ai voulu essayer avec un fichier test et ça ne fonctionne pas . Je sais pas si je m'y prends mal , mais je sais pas comment faire .
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
=== RESTART: C:\Users\marin\Desktop\Programmes\Python\bonjour (bloc-notes).py ==
bonjour
>>> #Chemin commençant par C:..
>>> open(r'C:\Users\marin\Desktop\Nouveau dossier')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
open(r'C:\Users\marin\Desktop\Nouveau dossier')
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\marin\\Desktop\\Nouveau dossier'
>>> open(r'\Users\marin\Desktop\Nouveau dossier')
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
open(r'\Users\marin\Desktop\Nouveau dossier')
PermissionError: [Errno 13] Permission denied: '\\Users\\marin\\Desktop\\Nouveau dossier'
>>> open(
Voilà j'ai créé à partir du bloc-notes une ligne de programmation disant bonjour , j'ai changé l'extension en .py comme demandé dans l'annexe 1 et ensuite j'ai rouvert le fichier à partir donc de python , j'ai fait run module ou F5 et j'ai eu cette page . Y'a ce >>> en haut où je ne peux strictement rien écrire et ensuite de mettre le chemin . Apparemment c'est ce qu'on trouve dans les propriétés du fichier et j'ai voulu essayer avec un fichier test et ça ne fonctionne pas . Je sais pas si je m'y prends mal , mais je sais pas comment faire .
Si vous voulez bien m'aider svp
Télécharge Idle et fait clic droit, ouvrir avec Idle.
Tu auras le code et tu pourras l' éditer dans le fichier.
C' est plus simple.
- Edité par Théobald d'Uberwald 31 mars 2020 à 17:47:56
Je n'ai pas compris; Le bloc-notes ouvre des dossiers ?
Non : Je voudrais comprendre comment ,avec Python , ouvrir d'autres logiciels comme par exemple le bloc-notes , vu qu'avec open(r".....")ça ne fonctionne pas .
bonjours j'ai un problème avec mon programme, ( j'utilise le module tkinter ) lorsque j'appuie sur le bouton, le mot le plus fréquent de mon texte est censé s'afficher a coté. malheureusement ça ne marche pas si vous pouviez jetez un œil
#...[LE TOUR DU MONDE EN 80 JOURS]...
#on importe les différents modules
import tkinter as tk
from tkinter import *
#-------------------------------------------------------
#[...MANIPULATION DE LA FENETRE...]
#-------------------------------------------------------
#je crée ma fenetre
fenetre= tk.Tk()
#je définie la taille de ma fenetre
fenetre.geometry("700x500")
#je definie
fenetre.title("ma fenetre")
#je definie moncanvas qui vas me permettre de mettre des forme sur la fenetre
#monCanvas = Canvas(fenetre, width=500, height=500, bg='ivory', bd=0, highlightthickness=0)
#------------------------------------------------------
#[...MANIPULATION DU TEXTE...]
#------------------------------------------------------
#2) on ouvre le texte et on le lis
f=open("ltdm.txt")
texte=f.read()
#je met tous le texte en minuscule
texte=texte.lower()
#je définie les terme qui sont interdit, pour évité que les mots soit attaché avec la ponctuation
texte=texte.replace(',',' ')
texte=texte.replace('.',' ')
texte=texte.replace("'",' ')
texte=texte.replace('-',' ')
texte=texte.replace('?',' ')
texte=texte.replace('!',' ')
texte=texte.replace('»',' ')
texte=texte.replace('«',' ')
texte=texte.replace(';',' ')
#je sépare les mots
texte=texte.split()
f.close()
#on créer le dictionnaire dico
dico=dict()
#-----------------------------------------------------
#[...LE CODE PRINCIPALE...]
#-----------------------------------------------------
#je crée une fonction pour remplir mon dico
def remplir_dico():
for mot in texte:
#on compte les mots
dico[mot]=texte.count(mot)
#je renvoie dico dans remplir_dico
return(dico)
#je crée la fonction pour compter les mots dans le texte
def longueur_dico():
# la somme de tout les mots vaut 0
somme=0
#a chaque mots du dico, on ajoute 1 a la somme de tout les mots
for i in dico.items():
somme=somme+1
#on definie la réponse
rep="il y a "+str(somme)+" mots dans ce texte"
#on envoie la reponse dans longueur_dico
return rep
#je crée la fonction pour savoir quel mot est le plus le plus fréquent avec un nombre de lettres définie
def le_plus_fréquent(num):
#on definie la variable qui vas empêcher un nombre moins fréquent dêtre selectionner
num_mot=0
votre_mot=""
#on partcours tout les mots du texte
for (mot,nombre) in dico.items():
#si la longueur du mot vaut la longueur demandé et si sa fréquence est supérieur à a celle du mot précdent alors...isinstance
if len(mot)==num and num_mot<nombre:
#la fréquence de ce mot devient la nouvelle bare a passer
num_mot=nombre
#le mot final sera égal au mot avec la plus grande fréquence
votre_mot=mot
#on envoie la réponse dans le_plus_fréquent()
affichage['text']=votre_mot
#----------------------------------------------------
#[...MANIPULATION DE L'INTERFACE GRAPHIQUE(GUI)...]
#----------------------------------------------------
#<<<parti graphique>>>
#<<<parti pratique>>>
#je definie un bouton qui executera la fonction le_plus_fréquent lorque num=4
affichage= tk.Label(fenetre, text=' ',fg="#F18905",font="-size 30")
Bouton_4lettre= tk.Button(fenetre,text="mot de 4 lettre", command=le_plus_fréquent(4))
#je place les élément cité plus haut sur la grille de ma fenetre
Bouton_4lettre.grid(row=4, column=0)
affichage.grid(row=4, column=3)
#je dit maintenant a la fenetre de s'afficher
fenetre.mainloop()
Je cherche ! J'ai mis un fichier texte avec ton nom "ltdm.txt"
À première vue, l'algo me semble pas bon.
Pourquoi "mot de quatre lettres ?" Si je comprends bien, tu veux le mot le plus fréquent, quelle que soit sa longueur ?
Dans ton code, il y a des choses que je connais pas, et alors je sais pas si c'est correct ou incorrect. par exemple, pour déclarer un dico. Je vais mettre des espions ! Par exemple un print("dico = ", dico) après le remplissage.
Je reviens quand j'ai trouvé. (sauf si quelqu'un a vu avant moi !)
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
bonjours j'ai un problème avec mon programme, ( j'utilise le module tkinter ) lorsque j'appuie sur le bouton, le mot le plus fréquent de mon texte est censé s'afficher a coté. malheureusement ça ne marche pas si vous pouviez jetez un œil
Poste la question dans le forum Python, le fil où tu viens de poster est en principe réservé aux exercices du cours ce qui n'est pas le cas de ton exo.
Y a déjà un truc tout bête : tu as bien écrit des fonctions, mais tu ne les appelles jamais !
Voilà l'algo que je propose :
mots_lus = [] liste de tuples (mots, compte) ; (Ça doit aller aussi avec un dictionnaire)
mot_le_plus_fréquent = (None, 0) tuple (mot, compte) pour chaque mot du texte : lire mot le comparer à chaque mot déjà lu s’il est nouveau : ajouter (nouveau mot, 1) aux mots lus si mot_lus est vide, mot_le_plus_fréquent = (mot, 1) sinon : incrémenter le compte de ce mot déjà lu. si ce compte > compte du mot_le_plus_fréquent : mot_le_plus_fréquent = (ce mot, ce compte)
Ça donne deux boucles for imbriquées.
- Edité par zakod 8 avril 2020 à 11:14:08
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Je cherche à produire un graphe (genre histogramme) à partir de données stockées dans un tableau à 2 dimensions. En fait il y a une correspondance dans la dimension [1] avec les données de la dimension [0].
Lorsque les données des 2 dimensions sont numériques, il n'y a pas de problème. l'utilisation de plt.hist2d fonctionne bien.
Mais voilà, dans mon tableau, la dimension 1 est une liste de variables texte. Et là, ça ne fonctionne pas.
Quelqu'un a-t-il une idée de la façon de faire ce genre de graphe?
Un grand merci à la communauté.
Voilà le bout de programme de test :
import os
import matplotlib.pyplot as plt
tb_synth=[['a','b','c','d','e','f','g','h','i','j'],[23,34,8,76,52,12,45,0,47,32]]
N1=tb_synth[0]
print(N1)
N2=tb_synth[1]
print(N2)
plt.hist2d(N1,N2)
plt.xlabel('caractères')
plt.ylabel('présence')
plt.grid(True)
plt.show()
Je suis entrain d'appliquer l'exercice d'analyse en composantes principales mais je suis confronté à un problème. J'utilise les mêmes données "décathlon".
D'abord pour moi quand j'importe les données ça ne vient pas dans un tableau.
De deux après avoir sortir les variables complémentaires comme Rank, points et Compétition, et après avoir fait
X.shape j'obtiens (41, 11) alors que l'enseignant trouve (41, 10).
Je ne sais vraiment pas où se trouve l'erreur. Votre aide s'il vous plaît. Merci
Je suis bloqué sur l'exercice de tri d'une liste de tuples selon la seconde valeur du tuple. (dans le chapitre "Créez des listes et des tuples (2/2)" au sein de "Découvrez la Programmation Orientée Objet côté utilisateur")
En fait, si je reprends la solution de l'exercice j'obtiens l'erreur suivante : "cannot unpack non-iterable ellipsis object". Est-ce qu'il y a une erreur dans la solution?
PI, je travaille sur Jupyter Notebook avec Python 3.
Je me remet sur l'apprentissage de python. j'avais terminé la leçon de Céline Martinet Sanchez qui nous fait coder le programme de san antonio. J'ai vu qu'on en parlais plus haut. Bon... j'ai perdu le fichier et j'ai donc recommencer en changeant son objectif. A la place de pondre des citations avec des personnages, je veux que le programme donne aléatoirement un nom et un prénom. J'ai donc besoin du même code.
Seulement voilà ça ne fonctionne pas. Pourtant, je ne vois pas d'erreur de codage. Le programme de san antonio démarre normalement, quand le mien " random_name ne démarre pas. Plus exactement, une fenêtre apparaît une petite fraction de seconde. Un peu comme un flash. Rien le temps de lire ou quoi que ce soit.
Au cas où, voici le code. Pour info, le codage n'est pas terminé, c'est normal. Ce qui ne l'est pas c'est que san antonio ( au même niveau d'avancement) s'affiche correctement quand le mien ne veut pas démarrer.
# -*- coding: utf8 -*-
# Human's Male Firstname's List we can meet in Targatt
firstname_hm = [
"Levi","Liam","Élias","Julian","Marcus","Léon","Fynñ","Lukas","Peter","Hans","Andreas","Walter","Kurt","Guts","Urs","Johann","Rolf","Ernst","Werner"
]
# Human's name list
name_h =[
"Langevin","Bones","Nogaret","Hanszbruck","Daragone","Von Brack"
]
def get_random_firstname(): # function to get random and show
# get a random number
# get a quote from an array
# show the name in the interpreter
pass
def get_random_item_in(name_h):
# TODO: get a random number
item = name_h[0] # get a name from a list
print(item) # show the name
return "promgram is over" # returned value
get_random_name_in() # call the function
print(get_random_item_in(name_h)) # show result
user_answer = input("""Taper "entrée" pour découvrir d'autres noms""") # asking action
# if user_answer == "B":
# pass
# elif user_answer == "C":
# print("C pas la bonne réponse ! Et G pas d’humour, je C...")
# else:
# # show another quote
# pass
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
Deep Learning
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
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Découverte Python Doc Tkinter Les chaînes de caractères
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Découverte Python Doc Tkinter Les chaînes de caractères