Python :: Exercice sur une fonction
Sayu
-
heyquem Messages postés 808 Statut Membre -
heyquem Messages postés 808 Statut Membre -
Bonjour,
Je suis en train de faire un tuto python, mais je ne comprends pas quelques ligne d'un code donné (sur lequel je dois faire des exos). Je cite :
Dans mon exo, ils me demandent de doubler la taille de la fenetre. C'est la que je me suis rendu compte que je ne comprenais pas ces lignes :
Pourquoi avoir fais un for ? Et pourquoi quand je supprime une valeur, ça fais un truc strange ? =/
J'ai taffé la dessus environ 3 heures, et j'ai pas saisi =/
Si vous voulez plus d'info n'hesitez pas à me le dire !
Merci à ceux qui veulent bien m'aider ^^
Cordialement,
Sayu
Je suis en train de faire un tuto python, mais je ne comprends pas quelques ligne d'un code donné (sur lequel je dois faire des exos). Je cite :
# -*- coding:Latin-1 -*-
class Application:
def __init__(self):
"""Constructeur de la fenètre principale"""
self.root =Tk()
self.root.title('Code des couleurs')
self.dessineResistance()
Label(self.root,
text ="Entrez la valeur de la résistance, en ohms :").grid(row =2)
Button(self.root, text ='Montrer',
command =self.changeCouleurs).grid(row =3, sticky = W)
Button(self.root, text ='Quitter',
command =self.root.quit).grid(row =3, sticky = E)
self.entree = Entry(self.root, width =14)
self.entree.grid(row =3)
# Code des couleurs pour les valeurs de zéro à neuf :
self.cc = ['black','brown','red','orange','yellow',
'green','blue','purple','grey','white']
self.root.mainloop()
def dessineResistance(self): ############################ [text de Sayu] Je ne comprends pas cette fonction
"""Canevas avec un modèle de résistance à trois lignes colorées"""
self.can = Canvas(self.root, width=250, height =100, bg ='ivory')
self.can.grid(row =1, pady =5, padx =5)
self.can.create_line(10, 50, 240, 50, width =5) # fils
self.can.create_rectangle(65, 30, 185, 70, fill ='light grey', width =2)
# Dessin des trois lignes colorèes (noires au départ) :
self.ligne =[] # on mémorisera les trois lignes dans 1 liste
for x in range(85,150,35):
self.ligne.append(self.can.create_rectangle(x,30,x+12,70,
fill='black',width=0))
def changeCouleurs(self):
"""Affichage des couleurs correspondant à la valeur entrée"""
self.v1ch = self.entree.get() # la méthode get() renvoie une chaîne
try:
v = float(self.v1ch) # conversion en valeur numérique
except:
err =1 # erreur : entrée non numèrique
else:
err =0
if err ==1 or v < 10 or v > 1e11 :
self.signaleErreur() # entrée incorrecte ou hors limites
else:
li =[0]*3 # liste des 3 codes à afficher
logv = int(log10(v)) # partie entière du logarithme
ordgr = 10**logv # ordre de grandeur
# extraction du premier chiffre significatif :
li[0] = int(v/ordgr) # partie entière
decim = v/ordgr - li[0] # partie décimale
# extraction du second chiffre significatif :
li[1] = int(decim*10 +.5) # +.5 pour arrondir correctement
# nombre de zéros à accoler aux 2 chiffres significatifs :
li[2] = logv -1
# Coloration des 3 lignes :
for n in range(3):
self.can.itemconfigure(self.ligne[n], fill =self.cc[li[n]])
def signaleErreur(self):
self.entree.configure(bg ='red') # colorer le fond du champ
self.root.after(1000, self.videEntree) # aprés 1 seconde, effacer
def videEntree(self):
self.entree.configure(bg ='white') # rétablir le fond blanc
self.entree.delete(0, len(self.v1ch)) # enlever les car. présents
# Programme principal :
from Tkinter import *
from math import log10 # logarithmes en base 10
f = Application() # instanciation de l'objet application
Dans mon exo, ils me demandent de doubler la taille de la fenetre. C'est la que je me suis rendu compte que je ne comprenais pas ces lignes :
self.ligne =[] # on mémorisera les trois lignes dans 1 liste
for x in range(85,150,35):
self.ligne.append(self.can.create_rectangle(x,30,x+12,70,
fill='black',width=0))
Pourquoi avoir fais un for ? Et pourquoi quand je supprime une valeur, ça fais un truc strange ? =/
J'ai taffé la dessus environ 3 heures, et j'ai pas saisi =/
Si vous voulez plus d'info n'hesitez pas à me le dire !
Merci à ceux qui veulent bien m'aider ^^
Cordialement,
Sayu
A voir également:
- Python :: Exercice sur une fonction
- Citizen code python - Accueil - Outils
- Citizen code python solution - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Python par la pratique : 101 exercices corrigés pdf - Forum Python
- [PyCharm] Pas d'interpréteur python ✓ - Forum Python
1 réponse
Bonsoir,
J’ai l’impression qu’il s’agit d’un exercice de création d’un rectangle représentant une résistance électrique avec trois bandes de couleurs constituant le code couleur pour la valeur de la résistance.
La taille de la fenêtre , ce doit être réglé par
self.can = Canvas(self.root, width=250, height =100, bg ='ivory')
Quant aux lignes que tu ne comprends pas, je pense qu’un rectangle suffit à être défini par deux points de ses angles opposés.
Ainsi x,30,x+12,70 doivent être les coordonnées des deux point d’un rectangle:
(x,30) un point
et (x+12,70) le second point
Ce rectangle est paramétrisé en x: en changeant la valeur de x on obtient des rectanles positionnées différemment.
Il y a deux bandes couleurs rectangulaires:
85,30,97,70
120,70,132,70
Pour créer ces bandes, for x in range(85,150,35): donne successivement des valeus à x.
Cependant il y a un problème car range(85,150,35) est une liste d’entier définie ainsi:
le premier entier est 85, puis les entiers suivants sont obtenus par ajout du pas 35 successivment, les entiers retenus étant ceux inférieurs à 150,
Exemple range(2,26,3) est (2,5,8,11,14,17,20,23). L’entier 26 est exclu car c’est la limite indiquée dans range(2,26,3)
Et à mon avis , il n’y a pas que deux bandes de couleurs sur une résistance.
Il faut modifier la valeur 155 car le range(85,155,35) est [85,120] 155 ne peut pas y être car<150
Note que je ne connais pas le module Tk
J'ai aussi l'impression qu'il n'y a pas beaucoup de pratiquants de Python sur ccm
J’ai l’impression qu’il s’agit d’un exercice de création d’un rectangle représentant une résistance électrique avec trois bandes de couleurs constituant le code couleur pour la valeur de la résistance.
La taille de la fenêtre , ce doit être réglé par
self.can = Canvas(self.root, width=250, height =100, bg ='ivory')
Quant aux lignes que tu ne comprends pas, je pense qu’un rectangle suffit à être défini par deux points de ses angles opposés.
Ainsi x,30,x+12,70 doivent être les coordonnées des deux point d’un rectangle:
(x,30) un point
et (x+12,70) le second point
Ce rectangle est paramétrisé en x: en changeant la valeur de x on obtient des rectanles positionnées différemment.
Il y a deux bandes couleurs rectangulaires:
85,30,97,70
120,70,132,70
Pour créer ces bandes, for x in range(85,150,35): donne successivement des valeus à x.
Cependant il y a un problème car range(85,150,35) est une liste d’entier définie ainsi:
le premier entier est 85, puis les entiers suivants sont obtenus par ajout du pas 35 successivment, les entiers retenus étant ceux inférieurs à 150,
Exemple range(2,26,3) est (2,5,8,11,14,17,20,23). L’entier 26 est exclu car c’est la limite indiquée dans range(2,26,3)
Et à mon avis , il n’y a pas que deux bandes de couleurs sur une résistance.
Il faut modifier la valeur 155 car le range(85,155,35) est [85,120] 155 ne peut pas y être car<150
Note que je ne connais pas le module Tk
J'ai aussi l'impression qu'il n'y a pas beaucoup de pratiquants de Python sur ccm