Je me permet de laisser un petit mot sur le forum car dans le cadre du cours "Apprendre à coder sur Python", on doit corriger 3 devoirs, dans le cadre des "activitées". J'en est déjà corriger 2, cependant, le dernier ne correspond pas du tout au cours (j'imagine que c'est un devoir sur jvs, css, ou html). Est-ce que quelqu'un à déjà eu ça???
Je commence à apprendre le python et je n'arrive pas à comprendre cette condition "
((a+0!=0) or(a@0==0))
" utilisé dans ce script ci-dessous pour vérifier si l'année est bissextile ou non :
a =eval(input('Veuillez entrer une année:')) if(a%4==0) and((a+0!=0) or(a@0==0)): print(a,"est une année bissextile") else: print(a,"n'estpasuneannéebissextile")
Merci beaucoup. Cordialement.
- Edité par MohamedNezarAbourraja 1 décembre 2018 à 19:13:14
J'étais en train de chercher @ dans la doc ! Et je me grattais la calvitie avec a + 0 != 0. Ne concerne que l'an 0.
Peut-être voir dans La vie de Brian.
année bissextile divisible par 4, sauf les siècles, (1900 n'était pas bissextile), mais avec les millénaires : ne pas se tromper; l'an 3000 sera bissextile. Déconnez pas.
donc (a % 4 == 0 and a % 100 != 0) or a % 1000 = 0
Pour info, ce sont des ajustements dus au fait que la période de rotation de la terre est de 365,25 jours un petit chouïa en moins. Un peu moins d'un quart de jour en plus par an, donc un jour en plus tous les quatre ans.
- Edité par zakod 1 décembre 2018 à 19:38:07
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Amende honorable : en effet, après 0,37 seconde de recherche (comme quoi il ne faut jamais laisser passer une occasion de vérifier ses connaissances), la règle actuelle n'est pas : divisible par 4, sauf par 100, mais quand-même par mille, elle est même un peu plus simple : divisible par 4, sauf par 400. Donc année bissextile : a % 4 == 0 and a % 400 != 0.
Merci Entwanne ! On aurait eu des emmerdes en l'an 3000.
- Edité par zakod 2 décembre 2018 à 11:50:15
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Non ce n'est toujours pas ça : 2000 est divisible par 4 et par 400, mais elle est bissextile.
La règle est plus proche de la première que tu avais énoncée : divisible par 4 mais pas par 100, ou divisible par 400.
Ce qui fait que les années 2000, 2004 ou 2400 sont bissextiles, mais que 1900, 2100 ou 3000 ne le sont pas.
Maintenant, je bute sur l'algèbre relationnelle...
J'explique : j'ai un tableau, avec des années, mois, jours numérotés de 1 à 31/30/28/29, des sexes (F ou M), et un nombre de naissance.
Je souhaite faire 2 choses : fusionner les lignes de la même année + mois + jour mais de sexe différents en 1 seule, et ainsi faire la somme du nombre de naissances filles et garçons de ce jour.
Transformer les jours en jours classiques, du type Lundi, Mardi, mercredi... jusqu'à dimanche. (car l'objectif est de calculer le nombre de naissances par jours de la semaine et par décennie).
Pour les années, je me débrouille avec les masques, et je sais nettoyer mon jeu de données.
j ai crée un programme python qui concerne l'algorithme de kruskal en théorie des graphes mais j'arrive pas a trouver la solution au problème des cycles
J'ai fait le premier quizz et je ne suis pas d'accord avec un point de la correction. (la première question). L'énoncé était : Après ces instructions, de quel type est la variable c ?
a = 8
b = 3
c = a / b
Selon la correction : <small>Les variables a et b sont toutes les deux entières, mais le résultat de la division de 8 / 3 retourne un nombre flottant (quelque chose comme 2,6666...). En conséquences, c'est le type float (flottant) qui est retourné par Python.</small>
Or, sauf erreur de ma part, une division entre deux entiers en python donnera toujours un int, avec un résultat arrondi. à moins de convertir au moins l'un des deux opérandes en float. C'est facilement vérifiable avec un simple interpréteur.
Je vois que je ne suis pas le seul à faire cette erreur. Mais pour obtennir un int dans le cas où les deux variables sont int il faut:
Je suis le cours Python "Apprenez à programmer en Python", et en théorie, tout semble aller.
Mais, lors de la pratique, je bloque totalement sur le TP dictionnaire ordonné. Pourriez-vous m'expliquer les quelques premières lignes du code ? Je me sens totalement perdue.
En effet, je comprends que l'on construise une class. Mais, je ne comprends pas :
- la ligne :
def__init__(self, base={}, **donnees):
Oui, on utilise une méthode constructeur, __init__, pour contrôler les attributs. On créé un dictionnaire, "base". Puis, je ne suis pas sure de comprendre "**donnees". Est-ce un dictionnaire, passé en paramètre ? A ce moment là, si c'est ça, pourquoi ne pas faire un second dictionnaire, sur le même modèle que "base" ?
- les lignes :
if type(base) not in (dict, DictionnaireOrdonne):<br> raise TypeError("Le type attendu est un dictionnaire")
On vérifie que base est un dictionnaire exploitable. Mais dans quel cas pourrait-il ne pas être exploitable ?
- Les lignes :
#On récupère les données de base:
for cle in base:
self[cle]=base[cle]
#On récupère les données de donnees:
for cle in donnees:
self[cle]=donnees[cle]
Ces lignes permettent-elles de faire coïncider les clés de "base" et de "donnees" ?
-Les lignes :
def __repr__(self):
chaine = "{"
premier_passage = True
for cle, valeur in self.items():
if not premier_passage:
chaine += ", " # On ajoute la virgule comme séparateur
else:
premier_passage = False
chaine += repr(cle) + ": " + repr(valeur)
chaine += "}"
return chaine
Qu'est-ce que "self.items()" ?
Puis, je ne comprends pas : si ce n'est pas "premier_passage", alors on ajoute une virgule comme séparateur. Sinon, si "premier_passage" est faux, on ajoute à la chaine "la clé : la valeur". Mais, "if not premier_passage" et "premier_passage=False" ne sont-ils pas la même chose ?
Merci beaucoup pour votre aide et votre patience... !
__init__ reçoit en effet un argument positionnel qui peut contenir un dictionnaire, avec lequel le dictionnaire ordonné sera initialisé.
**donnees est là pour permettre d'initialiser aussi le dictionnaire avec des arguments nommés, par exemple : DictionnaireOrdonne(key1='val1', key2='val2').
Les deux peuvent être combinés.
Pour la vérification du type, un isinstance serait préférable.
Mais un cas où le type de données reçu ne serait pas compatible est par exemple DictionnaireOrdonne(50).
Les itérations sur les clés/valeurs des deux dictionnaires permettent en effet de les insérer dans l'objet courant.
Pour items, c'est une méthode standard des dictionnaires qui renvoie chaque couple de clé/valeur.
Enfin, if premier_passage et premier_passage = False ne font pas du tout la même chose : le premier crée un bloc conditionnel tandis que le second assigne une valeur à une variable.
Cette assignation permet justement de ne pas rentrer à nouveau dans le bloc conditionnel aux itérations suivantes de la boucle.
Je viens de terminer l'exercice du chapitre sur les structures conditionnelles, et tout le résultat des dates que j'introduis est correcte excepté pour l'an 2000, pour cette date le résultat qui s'affiche est "Pas une année bissextile" hors, elle l'est!
Je n'arrive pas à réglé ce problème est ce que quelqu'un peux m'aider svp?
2000 vérifie la première condition (2000%100 == 0 est vrai) donc "Pas année bissextile" et ton elif n'est pas atteint.
Attention pas d'accent dans les noms de variable.
HamzaBoudjenana a écrit:
Bonjour
Je viens de terminer l'exercice du chapitre sur les structures conditionnelles, et tout le résultat des dates que j'introduis est correcte excepté pour l'an 2000, pour cette date le résultat qui s'affiche est "Pas une année bissextile" hors, elle l'est!
Je n'arrive pas à réglé ce problème est ce que quelqu'un peux m'aider svp?
j'ai inverse mon if et elif et dans ce cas là ca fonctionne, je suppose que ces du au fait que la condition (2000%400 == 0 est vrai et que 1900%400 != 0 est faux ) et donc de cette manière j'accède plus facilement à mon elif????
Je me suis lancé sur un exercice improvisé un peu inspiré de l'exercice ZCasino (en plus simple)
Le but étant de créer un programme d'effeuillage de marguerite: l'utilisateur choisi le nb de pétales de la marguerite, entre 1 et 5, et a une réponse personnalisée en fonction du nombre de pétale choisi (1 pétale = Je t'aime un peu; 2 pétales = Je t'aime beaucoup etc...) (Oui je me sers de mon apprentissage à des fins romantiques )
J'ai voulu introduire dans mon code une vérification de l'input de l'utilisateur (pour etre bien sur que le nombr ede pétales soit bien un nombre, et compris entre 1 et 5), et la je commence à bloquer, voici mon code:
import os
continuer_a_jouer = True
print("Oh la belle Marguerite, mais combien a-t'elle de pétales?")
while continuer_a_jouer:
nb_de_petales = -1
while nb_de_petales < 1 and nb_de_petales > 5:
nb_de_petales = input("Selectionnez le nombre de pétales, entre 1 et 5 :")
try:
nb_de_petales = int(nb_de_petales)
except ValueError:
print("Vous n'avez pas saisi de nombre")
nb_de_petales = -1
continue
if nb_de_petales < 1:
print("La fleur comporte au moins 1 pétale")
if nb_de_petales > 5:
print("La fleur comporte au maximum 5 pétales")
if nb_de_petales == 1:
print ("Je t'aime un peu!")
nb_de_petales -= (nb_de_petales + 1)
elif nb_de_petales == 2:
print ("Je t'aime un peu, beaucoup!")
nb_de_petales -= (nb_de_petales + 1)
elif nb_de_petales == 3:
print ("Je t'aime un peu, beaucoup, passionément!")
nb_de_petales -= (nb_de_petales + 1)
elif nb_de_petales == 4:
print ("Je t'aime un peu, beaucoup, passionément, à la folie!")
nb_de_petales -= (nb_de_petales + 1)
else:
print ("Bon, normalement on tombe sur Pas du tout, mais cette réponse est exclue, donc je t'aime doublement à la folie!")
nb_de_petales -= (nb_de_petales + 1)
os.system("pause")
J'ai essayé deux méthodes, la première, ci-dessus, avec "while nb_de_petales < 1 and nb_de_petales > 5:" , si je run le programme, j'ai alors:
-Pas de proposition d'input pour l'utilisateur
-une boucle infinie qui semble en place, avec l'affichage de lignes "Bon, normalement on tombe sur Pas du tout, mais cette réponse est exclue, donc je t'aime doublement à la folie!" , qui censé correspondre au cas ou l'utilisateur ai choisi 5 pétales.
En revanche, avec "while nb_de_petales == -1", j'ai alors:
-La proposition d'input pour l'utilisateur
-Un programme qui semble fonctionnel, SAUF si le nombre de pétales choisis est supérieur à 5, j'ai alors l'affichage suivant:
"Selectionnez le nombre de pétales, entre 1 et 5 :7
La fleur comporte au maximum 5 pétales
Bon, normalement on tombe sur Pas du tout, mais cette réponse est exclue, donc je t'aime doublement à la folie!
Selectionnez le nombre de pétales, entre 1 et 5 :"
Je me doute que c'est à cause de mon else à la fin, qui logiquement doit renvoyer à nb_de_petales == 5 , mais en fait vaut pour >5
Bonjour, j'ai remarqué que dans la section qui parle d'écrire du code dans des fichiers, les indications concernant l'encodage et le header d'encodage sont passées de date, si quelqu'un sait comment on peut remonter l'info au professeur ?
Je suis en train d'apprendre le cour "Apprenez à programmer en Python" et termine la section "Créez des structures conditionnelles".
Je n'arrive pas à comprendre un exemple de la sous-section sur les mots clés and,or,not.
Soit la suite d'instructions à tester en initialisant au préalable par a=5:
Précédée du passage :
"Nous allons chercher à savoir si a n'est pas dans l'intervalle. La variable ne se trouve pas dans l'intervalle si elle est inférieure à 2 ou supérieure à 8. Voici donc le code :"
Or quand je teste la suite d'instructions sus mentionnée dans l'interpréteur, j'obtient la réponse "a est dans l'intervalle.". Renvoi qui contredit les 2 phrases sus mentionnées.
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.
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.
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.
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
typage structurel ftw