Categories
Apprentissage Javascript Web

Suite de Javascript

Logo JavaScript

Après avoir vu les basiques de la syntaxe du langage JavaScript (JS), je continue mon apprentissage : direction les conditions et les fonctions…
Je continue donc de suivre le cours d’OpenClassrooms : Apprenez à coder avec JavaScript.

Là encore, le principe de réflexion est le même qu’en Python. Il me reste donc plus qu’à m’adapter à la syntaxe…

les opérateurs

En JavaScript, la syntaxe des opérateurs est différente de celle utilisée en Python.
Je vous les liste ci-dessous les différences :

ET : && 
OU : ||
NON : !

ÉGAL : ===
DIFFÉRENT : !==

Il est préférable d’utiliser cette syntaxe (triple symbole) pour marquer une (in)égalité. Il faut toutefois garder à l’esprit que parfois un double symbole permet d’éviter un bug.

Les conditions

La condition « IF »

Il est bon de noter qu’en JS, les instructions de la condition « IF » s’exécutent quand la condition est vraie.
Voici la syntaxe générale :

if (condition) {
    //instructions exécutées lorsque la condition est vraie
} else {
    //instructions s'il y a un "sinon"
}
Cas de nombreuses conditions

L’avantage en JavaScript, c’est qu’il est possible de regrouper sous un même code un groupe d’instructions permettant de répondre à différents cas de condition. On utilise alors des blocs d’opération pour traiter chaque cas.

const variable = prompt("blabla");
switch (expression) {
    case valeur1 :
        // instruction quand expression vaut valeur1
        break;  // si nécessaire
    case valeur2 :
        // instruction quand expression vaut valeur2
        break;  // si nécessaire
// ...
    default :
        // instruction quand expression vaut aucune des valeurs précédentes
}

Lorsque l’on utilise la condition « switch », lorsque l’on souhaite arrêter la vérification des conditions, il est important de ne pas oublier de mettre l’instruction « break ».
En effet, elle permet de sortir du « switch » et évite de continuer à traiter les cas suivants (évite le passage d’un bloc à l’autre).

On notera toutefois que l’instruction « break » n’est pas utilisée lorsque l’on souhaite que le programme vérifie plusieurs conditions avant d’afficher le résultat demandé.

Les conditions en boucle

Tout comme en Python, il existe 2 types de boucles : « While » et For ».
La boucle « while » est utilisée tant qu’une condition est vérifiée.

while (condition) {
    // instructions exécutées tant que la condition est vérifiée
    // NE PAS OUBLIER de mettre une fin de condition pour éviter la boucle infinie 
}

La boucle « for »est à privilégier si l’on peut prévoir au préalable le nombre de tours de boucle à effectuer. La condition est donc basée sur une variable qui est modifiée dans le corps de la boucle.
Elle prend en compte 3 paramètres qui constituent le compteur de boucle :
– initialisation : c’est la valeur initiale de la variable compteur, principalement nommée « i ». Il est possible de la déclarer directement dans le compteur de boucle si elle n’est pas utilisée ailleurs (« let i = « ) ;
– condition : elle est évaluée à chaque tour de boucle ;
– étape : elle est réalisée à chaque fin de boucle.

for (initialisation ; condition ; étape) {
    // instructions exécutées tant que la condition est vérifiée
}

Ci-dessous, voici un exemple concret :

for (let i = 0 ; i < 5 ; i++) {
    console.log(i)
} 
// le programme affichera 0 1 2 3 4 

Les fonctions

Ici aussi, le raisonnement pour une fonction est le même qu’en Python.
Voici donc la syntaxe générale :

function maFonction ( ) {
    // instructions de la fonction
}

maFonction( );   // appel de la fonction

En JavaScript il existe aussi une autre syntaxe pour écrire une fonction. Il s’agit de la fonction fléchée dont voici un exemple général :

const maVariable = (parametre1, parametre2, ...) => {
    // instructions pouvant utiliser chaque paramètre
}

//appel de la fonction où chaque paramètre reçoit la valeur d'un argument
maVariable(argument1, argument2, ...);  

Categories
Apprentissage Javascript Web

Passage à JavaScript

Logo JavaScript

Après avoir vu les bases du langage HTML et CSS, je me lance dans JavaScript !

Pourquoi ?

Les langages HTML et CSS permettent d’obtenir une page web statique. Le langage CSS apporte la mise en forme (le visuel) de la page.
Le langage JavaScript va ensuite permettre de dynamiser les pages web.

Mais qu’est ce que c’est ?

Le langage JavaScript a été inventé en 1995 et permet de dynamiser de façon simple les pages Web. En effet, ces dernières étaient jusqu’alors très simples (voire statiques).
L’ampleur qu’a alors prise le langage Javacript est telle qu’il est devenu incontournable dans le développement de l’affichage des pages Web sur les navigateurs (c’est ce que l’on nomme développement front-end). Il est aussi très présent dans le développement côté serveur (ou développement back-end), côté mobile ou logiciels.
La communauté autour de ce langage est aujourd’hui très importante, ce qui permet d’accéder à de nombreuses nouveautés (fonctionnalités, aides, etc.).


Mon apprentissage…

Je débute donc mon apprentissage de JavaScript en suivant le cours sur OpenClassrooms : Apprenez à coder avec JavaScript.

Après avoir étudié Python, JavaScript me semble très facile…
C’est principalement la syntaxe qui change. Il va falloir que je me réhabitue ! 😉

Les changements par rapport à Python

  1. La première nouveauté pour moi c’est que JavaScript utilise des blocs de code obligatoirement mis entre accolades  » { } « .
  1. Il faut aussi penser à mettre un point-virgule  » ;  » à la fin de chaque ligne définissant une consigne.
  1. Concernant les variables, on peut déclarer 2 types de variables :

– les variables constantes : elles ne changent jamais tout au long du programme et ne s’affichent pas.

const variable ;

– les variables « standard » : leur valeur peut être modifiée au cours du programme.

let variable ;

Et il ne faut pas oublier que lors de la programmation, il est très important de déclarer une variable vide pour pouvoir ensuite l’incrémenter.

let variable = " " ;
// ... suite du programme
variable = variable + 1 ;
// ... suite du programme
  1. L’affichage des variables est aussi différent.

Pour exprimer une chaîne de caractère avec une variable à l’intérieur, la syntaxe se fait avec des accents graves  » ` `  » puis la variable est mise sous la forme « ${variable} « .

const country = "France" ;
console.log(`Je vis en ${country}`);
  1. Autre grande différence avec Python : JavaScript permet d’affichage d’une boite de dialogue dans un navigateur web.

Il existe des instructions spécifiques pour le faire : « prompt( ) » et « alert( ) ».

const prenom = prompt("Entrez votre prénom :");
alert(`Bonjour, ${prenom}`);

L’instruction « prompt( ) » permet d’afficher une boite de dialogue dont la valeur sera stockée dans la variable associée.

Saisie du prénom de l'utilisateur

L’instruction « alert( ) » permet d’afficher la valeur de la variable précédente dans une deuxième boite de dialogue.

Fenêtre de dialogue javascript

Javascript permet de dynamiser les pages web !

Categories
Apprentissage CSS HTML Web

Changement de langage

Je poursuis mon apprentissage dans l’optique de devenir développeuse web… Et pour ça, j’ai changé de langage !
En effet, pour pouvoir coder les sites web il faut impérativement que je connaisse les langages adaptés au web : notamment HTML et CSS.

Langage HTML

Le HTML (HyperText Markup Language ou Langage de balisage d’hypertexte) a été créé en même temps que le World Wild Web, dans les années 1990. Ce n’est pas un langage de programmation. Il permet d’écrire du texte en hypertexte. Ainsi que de mettre en forme du contenu grâce à des balises. Ces balises définissent où mettre des titres, des sous-titres, du texte en gras. Elles définissent aussi où ajouter des éléments interactifs (photos, vidéos, liens, etc.). La visualisation d’une page écrite en HTML se fait uniquement via un navigateur.
Après de nombreuses évolutions, ce langage de balisage propose depuis 2014 une version plus aboutie : le HTML5.

Langage CSS

Le CSS (Cascading Style Sheets ou Feuilles de style en cascade) est apparu en même temps que le HTML. C’est une feuille de style qui définit comment les éléments de la page HTML doivent être affichés sur l’écran (police de caractère, couleur, alignement, etc.). 

Vers 2010, le langage évolue vers sa 3ème version : CSS3.

Le CSS est complémentaire au HTML, ils fonctionnent de concert. C’est pour cette raison qu’il est important de les étudier en même temps.
Il est bon de noter que ces 2 langages sont améliorés et approuvés au fil de temps par le W3C (World Wild Web Consortium, thème que j’aborderai dans un prochain post !).

Leur apprentissage

Pour ce faire, j’ai suivi un cours sur OpenClassrooms : Apprenez à créer votre site web avec HTML5 et CSS3
Dans ce cours, j’ai appris les fondamentaux pour créer une page web. Et j’ai créé un CV fictif pour mettre en application ce nouvel apprentissage : celui de Marie Curie ! 😉
Ce cours permet de donner de bonnes bases sur ces deux langages. Il est simple et permet de mettre rapidement en application ce qu’on a appris.

Mon conseil 

Lors de l’apprentissage de ces 2 langages, l’important est de prendre des notes. En effet, lorsqu’on débute, il est difficile de se souvenir de toutes les balises. Or l’utilisation et le positionnement de ces balises sont très importants pour avoir un code lisible et structuré.
Il est impératif d’avoir un dossier commun contenant le fichier .html, .css, les images et polices spéciales. Sinon la page html ne s’affichera pas correctement !


Je vous mets mes deux codes qui permettent d’afficher le CV de Marie Curie que j’ai réalisé. 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="stylecv.css" />
        <title>Mon CV - Marie Curie</title>
    </head>

    <body>
        <nav class="lisere">
            <p>
                
            </p>
        </nav>
        
    	<header>
           <a href="marie_curie.jpeg"><img src="marie_curie_mini.jpg" class="image" alt="portrait de marie curie" title="cliquez pour agrandir la photo !" /></a> <!-- image-->
            <div class="titre"> <!-- titre-->
                <h1>Marie Curie</h1>
                1867-1934<br/>
      		    Première femme a avoir reçu le prix Nobel de Chimie pour ses travaux sur le polonium et le radium.
            </div>
    	</header>


    	<section id="corps">
            <div class="experience">
    	       <h2>Son Expérience</h2>
    	       <ul>
                    <li><strong>1893</strong> : Obtention de la licence en Sciences Physiques</li>
        			<li><strong>1894</strong> : Obtention de la licence en Sciences Mathématiques</li>
        			<li><strong>1896</strong> : Première au concours d'agrégation pour l'enseignement des jeunes filles - section Mathématiques</li>
        			<li><strong>1897-1903</strong> : Thèse intitulée Recherches sur les substances radioactives</li>
        			<li><strong>1903</strong> : Prix Nobel de Physique (reçu conjointement avec Pierre Curie, son mari, et Henri Becquerel)</li>
        			<li><strong>1911</strong> : Prix Nobel de Chimie (<a href="https://fr.wikipedia.org/wiki/Marie_Curie#/media/Fichier:Marie_Sk%C5%82odowska-Curie's_Nobel_Prize_in_Chemistry_1911.jpg">diplôme accompagnant le prix Nobel</a> )</li>
        		</ul>
            </div>
            <div class="competence">
        		<h2>Ses Compétences</h2>
        		<ul>
                    <li>Mathématiques</li>
        			<li>Physique</li>
        			<li>Chimie</li>
        			<li>Découverte du polonium</li>
        			<li>Découverte du radium</li>
                    <li>Liste non exhaustive !</li>
                </ul>
            </div>
            <div class="formation">
        		<h2>Sa Formation</h2>
        		<ul>
                    <li><strong>1883</strong> : diplôme de fin d’études secondaires avec la médaille d’or</li>
        		    <li><strong>1891</strong> : études de Physique à la Faculté des Sciences de Paris</li>
                </ul>
            </div>
    	</section>

    </body>
</html>
/* polices spéciales */

@font-face 
{
	font-family: "gothic";
	src: url("Elementary_Gothic.otf") format("opentype"),
		 url("Elementary_Gothic.ttf") format("truetype");
}

@font-face
{
	font-family: "summertime";
	src: url("SummertO.ttf") format("truetype");
}

/* En Tête */

header
{
	display: flex;
	flex-direction: row-reverse;
	justify-content: center;
	align-items: center;
	height: 10%;
	max-width: 90%;
	position: relative;
	left: 10%;
}

.image  /* image avec bordure et ombre */
{
	margin: auto;
	border: 6px navy double;
	box-shadow: 8px 4px 6px blue;
	width: 60%;
	height: 60%;
}

.titre
{
	margin: auto;
	text-align: center;
	color: gray;
	font-size: 1em;
	font-style: italic;
}

h1  /* titre de couleur différente, centré et avec police spéciale */
{
	font-family: "gothic", Impact, Georgia, Verdana, sans-serif;
	font-weight: bold;
	color : gray;
	text-align: center;
}

/* Liseré */

.lisere   
{
	position: absolute;
	left: 1px;
	top: 1px;
	width: 10%;
	height: 100%;
	background: url("fondchimie.png") repeat-y center;
	border-right: 1px teal solid;
	border-radius: 6px/8px;

}

/* Corps de Texte */

body
{
	font-family: Arial, "Times New Roman", sans-serif;
}


#corps
{
	display: flex;
	justify-content: flex-start;
	align-items: stretch;
	max-width: 90%;
	position: relative;
	left: 10%;
}

div
{
	margin: top;
	width: auto;
	min-width: 33%;
}

ul  /*ne pas afficher les puces*/
{
	list-style-type: none;
}

h2  /* mise en forme titre h2*/
{
	font-family: "summertime", Impact, sans-serif;
	font-size: 2em;
	font-style: italic;
	color: teal;
	text-align: center;
}

/* style des liens */
a
{
	color: blue;
}
a:hover
{
	text-decoration: underline;
	color: aqua;
}


/* affichage sur des écrans plus petits que 1024px */

@media screen and (max-width: 1024px)
{
	.lisere
	{
		display: none;	/* suppression du liseré */
	}

	#corps
	{
		display: flex;
		flex-direction: column;
	}
}

Categories
Apprentissage Découverte Raspberry Pi

Découverte du Raspberry Pi 4B

Aujourd’hui, j’ai enfin fait la découverte et le montage du Raspberry Pi 4B que j’ai eu à Noël !

Contenu coffret LABISTS Raspberry Pi 4 - Espace Raspberry

Et ce ne fut pas une mince affaire… 😉

Heureusement que YouTube existe…

En effet, dans mon kit de démarrage, il n’y avait pas de notice de montage. Aïe, pour une débutante la tâche me semblait ardue !

J’ai donc cherché sur YouTube une vidéo me permettant de monter mon Raspberry Pi pour pouvoir m’en servir.
J’ai alors trouvé une super vidéo de GuiPoM qui teste le même kit de démarrage que j’ai eu.

Il donne beaucoup d’explications et fait un comparatif complet avec son expérience sur le Raspberry Pi 3.
a noter que pour les plus impatients, vous pouvez aller directement à la 27ème minute pour commencer le montage !

J’ai donc suivi scrupuleusement ses conseils et j’ai monté mon Raspberry Pi rapidement.

Me voici donc avec mon « nouvel ordinateur » branché sur la télé… 😉

Et c’est parti pour le paramétrage du Raspberry Pi…

L’avantage de ce kit de démarrage c’est que sur la carte SD incluse, tout est déjà installé dessus. Je n’ai donc pas eu besoin de télécharger le système d’exploitation (Raspbian) ni les éléments de base (comme, par exemple, la suite Open Office). 
J’ai donc suivi les instructions de démarrage qui permettent d’initialiser l’ordinateur… Et après une mise à jour et un redémarrage, je peux enfin l’utiliser !

Direction l’environnement mis en place spécialement pour Python sur le Raspberry Pi : Thonny.

Et pour bien démarrer, quoi de plus normal que de commencer avec un « Hello World » ? 

C’est chose faite…

Je peux enfin dire que j’ai bien inauguré mon Raspberry Pi !!! 😀

Categories
Apprentissage Python

Jeu de Roulette – Python Orienté Objet (POO)

Ça y est, c’est fait… Je viens de terminer mon programme du jeu de roulette en Python orienté objet ! Et je peux vous dire que je suis vraiment contente d’y être arrivée… 😀

En détail, ça donne quoi ?

J’ai donc créé deux objets :
l’objet « joueur » qui est défini par son pseudo, son porte-monnaie (l’argent qu’il a au départ), le numéro sur lequel il mise et la somme qu’il mise sur ce numéro.
l’objet « jeu » qui est défini par un numéro gagnant et un calcul des gains.

Pour simplifier la visualisation de ces objets, j’ai créé 2 fichiers distincts enregistrés dans le même dossier que le fichier avec mon programme final (ce qui permet d’appeler plus facilement ces fichiers).

L’objet « Joueur »

Pour chaque caractéristique de mon objet « Joueur », j’ai défini une fonction (ou méthode) qui sera utilisée dans le programme final.
Je me suis servi du code que j’avais déjà créé lors de mon premier programme : j’en ai extrait les éléments nécessaires et les ai amélioré pour un meilleur fonctionnement du programme.

Voici le code de mon objet « Joueur » :

class Joueur:
    """Classe définissant un joueur de roulette caractérisé par :
    - son pseudo ;
    - son porte monnaie ;
    - un numéro misé
    - une somme misée   """

    
    def __init__(self, pseudo, porte_monnaie, numero_mise, somme_misee):
        """Constructeur de notre classe"""
        self.pseudo = pseudo
        self.porte_monnaie = porte_monnaie
        self.numero_mise = numero_mise
        self.somme_misee = somme_misee

    def nom_joueur(self, pseudo):
        """Méthode permettant de vérifier que le nom du joueur n'est pas un chiffre et de l'afficher   """
        NomCorrect = False
        while NomCorrect == False :
            self.pseudo = input("Quel est votre nom ?")
            #self.pseudo = 'Anonyme' if len(self.pseudo) == 0 else self.pseudo
            try:
                int(self.pseudo) != False
            except ValueError:
                print("Bienvenue {} sur la table de la Roulette du Zcasino !".format(self.pseudo))
                NomCorrect = True
            else :
                print("Il y a une erreur, êtes vous certain de votre frappe ?")



    def argent_joueur(self, porte_monnaie):
        """Méthode permettant de vérifier que le joueur a de l'argent pour jouer"""
        Argent = False
        while Argent == False :
            self.porte_monnaie = input("\nAvec quelle somme d'argent souhaitez vous jouer ? ")
            try:
                int(self.porte_monnaie) != False
            except ValueError:
                print("Il y a une erreur, êtes vous certain de votre frappe ?")
            else :
                self.porte_monnaie = int(self.porte_monnaie)
                if self.porte_monnaie < 1 :
                    print("Vous ne pouvez pas jouer sans argent !")
                else :
                    Argent = True

    def num_joueur(self, numero_mise):
        """Méthode permettant de vérifier que le joueur a bien misé sur un numéro de la roulette"""
        Numero = False
        while Numero == False :
            self.numero_mise = input("\nSur quel numéro souhaitez vous miser (entre 0 et 49) ? : ")
            try:
                int(self.numero_mise) != False
            except ValueError:
                print("Il y a une erreur, êtes vous certain de votre frappe ?")
            else :
                self.numero_mise = int(self.numero_mise)
                if self.numero_mise < 0 or self.numero_mise > 49:
                    print("Le numéro choisi n'existe pas, veuillez en choisir un autre !")
                else :
                    Numero = True
    
    def mise_joueur(self, somme_misee):
        """ Methode permettant de vérifier que le joueur mise l'argent qu'il a dans son porte monnaie """
        Mise = False
        while Mise == False :
            self.somme_misee = input("\nQuelle somme souhaitez vous miser sur ce numéro ? : ")
            try:
                int(self.somme_misee) != False
            except ValueError :
                print("Etes vous certain de votre frappe ?")
            else :
                self.somme_misee = int(self.somme_misee)
                if self.somme_misee < 0:
                    print("Vous ne pouvez pas miser un nombre négatif !")
                elif self.somme_misee > self.porte_monnaie:
                    print("Vous n'avez pas assez d'argent !")
                else :
                    Mise = True
L’objet « Jeu »

Cet objet est plus simple, car il ne contient qu’une seule fonction : celle du calcul des gains.
Il y a une petite particularité importante à prendre en compte : seule la variable « gain » est associée à l’objet. Lors de la rédaction de la fonction de l’objet, il n’y aura donc que cette variable qui sera nommée avec « self.~ ».

Voici le code de mon objet « Jeu »

class Jeu:
    """Classe définissant le jeu de la roulette caractérisé par :
    - un numéro gagnant ;
    - un gain rapporté    """

    
    def __init__(self, gagne, gain):
        """Constructeur de notre classe"""
        self.gagne = gagne
        self.gain = gain

    import random
    def num_gagnant(self, gagne):
        """Méthode permettant de selectionner le numéro gagnant   """
        self.gagne = random.randrange(50)
        print("Le numéro gagnant est le numéro ", self.gagne)
        
    import math
    def gain_partie(self, gagne, somme_misee, numero_mise, gain):
        """Méthode permettant de déterminer le gain du joueur en fonction du numéro gagnant  """
        import math
        if gagne != numero_mise :
            if (self.gagne %2 == 0 and numero_mise %2 == 0) or (gagne %2 != 0 and numero_mise %2 != 0):
                self.gain = math.ceil(somme_misee * 0.5)
                print("\n Vous avez misé sur la bonne couleur, vous gagnez {} $".format(self.gain))
            else:
                print("\n Loupé, Vous venez de perdre votre mise !")
                self.gain = -somme_misee                
        else:
            self.gain = 3 * somme_misee
            print("\n Votre gain est de 3 fois votre mise, soit {} $".format(self.gain))
Le programme final

J’ai ensuite remplacé dans mon programme initial tous les morceaux mis dans mes objets par l’appel des objets eux-mêmes.
Là j’ai eu a me creuser les méninges, car un remplacement brut ne marche pas… 😉
Déjà, il faut bien penser à importer les 2 fichiers objets.

import ZCasino_jeu
import ZCasino_joueur

Ensuite, l’appel des objets et de ses fonctions doit être fait correctement.
J’ai commencé par créer les variables et je les ai mises nulles au départ. Puis j’ai créé le « joueur1 » auquel j’ai attribué mon objet « Joueur » (récupéré depuis mon fichier).

# appel de variables 'nulles'
pseudo = 0
porte_monnaie = 0
numero_mise = 0
somme_misee = 0

# description du joueur
joueur1 = ZCasino_joueur.Joueur(pseudo, porte_monnaie, numero_mise, somme_misee)

Puis j’ai appelé les différentes fonctions du joueur.
Il ne faut pas oublier d’attribuer les fonctions directement au « joueur1 » ! 😉

pseudo = joueur1.nom_joueur(pseudo)
porte_monnaie = joueur1.argent_joueur(porte_monnaie)
# ...
numero_mise = joueur1.num_joueur(numero_mise)
# ...
somme_misee = joueur1.mise_joueur(somme_misee)

Lors du calcul des gains, j’ai ensuite créé la variable « gain » nulle pour pouvoir créer le système de calcul en appelant mon objet « Jeu » (via le fichier !).

 # gains
        gain = 0
        jeu = ZCasino_jeu.Jeu(gagne, gain)
        gain = jeu.gain_partie(gagne, joueur1.somme_misee, joueur1.numero_mise, gain)

Il reste ensuite à mettre à jour le porte-monnaie du « joueur1 ».

joueur1.porte_monnaie = joueur1.porte_monnaie + jeu.gain
        print("Il vous reste donc {} $ pour continuer de jouer.".format(joueur1.porte_monnaie))

Et voila le programme est fait ! 😉

Le voici complet :

import os
import random
import math
import ZCasino_jeu
import ZCasino_joueur


# ****** programme du jeu de la roulette **********
print("Bienvenue au ZCasino, voici le jeu de la Roulette !")

# appel de variables 'nulles'
pseudo = 0
porte_monnaie = 0
numero_mise = 0
somme_misee = 0
# description du joueur
joueur1 = ZCasino_joueur.Joueur(pseudo, porte_monnaie, numero_mise, somme_misee)
pseudo = joueur1.nom_joueur(pseudo)
porte_monnaie = joueur1.argent_joueur(porte_monnaie)
# début du jeu
j=1
while j != 0 :
        # numéro choisi par le joueur
        numero_mise = joueur1.num_joueur(numero_mise)
        # choisir sa mise
        somme_misee = joueur1.mise_joueur(somme_misee)
        print("\n Votre mise est de {} $ sur le numéro {} \n".format(joueur1.somme_misee, joueur1.numero_mise))
        # lance la roulette
        print("A vos jeux... La roulette est lancée... \n")
        gagne=random.randrange(50)
        print("Le numéro gagnant est le numéro ", gagne)
        # gains
        gain = 0
        jeu = ZCasino_jeu.Jeu(gagne, gain)
        gain = jeu.gain_partie(gagne, joueur1.somme_misee, joueur1.numero_mise, gain)
        # argent restant au joueur
        joueur1.porte_monnaie = joueur1.porte_monnaie + jeu.gain
        print("Il vous reste donc {} $ pour continuer de jouer.".format(joueur1.porte_monnaie))
        # possibilité de rejouer ou non
        if joueur1.porte_monnaie == 0:
                print("\nVous n'avez plus d'argent ! Au revoir et à bientôt au ZCasino ")
                j=0
        else:
                r=input(" Voulez vous rejouer ? (O / N) ")
                if r == "O" or r == "o" :
                        j=1
                else:
                        print("Au revoir et à bientôt au ZCasino ")
                        j=0

os.system("pause")   # met en pause le système Windows

Pour conclure

Voici une citation qui correspond tout à fait à mon état d’esprit après ma réussite.

Car oui, je suis fière d’avoir réussi cette étape ! 🙂


Categories
Apprentissage Découverte Raspberry Pi

Nouveau projet : programmer un ordinateur !

Devinez ce que le père Noël a déposé au pied du sapin…
Un Raspberry Pi !

Qu’est ce que c’est ?

Le Raspberry Pi est ce qu’on appelle un nano-ordinateur.
En effet, il est composé uniquement d’une carte mère sur laquelle il va falloir ajouter tous les composants, comme par exemple le boitier, le clavier, la souris, l’écran, etc. (il existe aussi de nombreux kits « tout en un » proposés pour débuter avec le Raspberry Pi !).
Puis il faudra programmer cet ordinateur pour qu’il puisse fonctionner.

Le Raspberry Pi a été conçu dès 2006 puis amélioré par la Fondation Raspberry Pi (avec le soutien de l’Université de Cambridge et du fabricant de semi-conducteurs Broadcom) dès 2009. Il a été officiellement lancé en 2012.
Son objectif est de rendre accessible l’informatique et d’encourager les jeunes à s’intéresser à la programmation informatique.
En effet, le fait qu’il soit « nu », diminue considérablement le prix d’achat et le rend donc accessible à tous.

Que faire avec le Raspberry Pi ?

Il y a de nombreux sites qui proposent des idées de projets (dont le site officiel de Raspberry Pi !).
Pour être très vaste, on peut citer les jeux vidéo (ou non !), un robot, un site web, de la musique, etc.

Alors, qu’est ce que je vais en faire ?

Dès que j’aurais fini mon apprentissage du Python (et de ses objets !), je vais me lancer dans la découverte de mon Raspberry Pi.
Je n’ai pas encore fait le tour de tout ce qu’il est possible de faire, mais aujourd’hui j’en ferais bien un serveur web ou pourquoi pas quelque chose de plus pratique comme un arrosage automatique des plantes de mon balcon (car vous ne le savez peut-être pas, mais je n’ai pas du tout la main verte ! 😉 )…
Je pense qu’en découvrant cet ordinateur je vais avoir de plus en plus d’idées !!!


Un petit plus…

En attendant, voici les premiers sites sur lesquels je suis tombée et qui fourmillent d’idées :
– Le site officiel de Raspberry Pi et ses projets
– Le site Français de Raspberry Pi et ses tutoriels
– Korben et ses 60 idées
– Le blog de Nouvelles Technologies et ses 10 projets pour débutants
– Hitek et ses 10 idées cool

Categories
Apprentissage Python

Python et la programmation Orientée Objet

Allez, je me lance dans l’aventure de l’orienté objet en Python…

Mais qu’est ce que c’est ?

En Python (ainsi que dans d’autres langages), il est possible de faire des programmes dits « orientés objets ».

Pour cela, il faut définir une classe. C’est la représentation informatique d’un objet issu du monde réel.

L’exemple le plus simple pour comprendre est le cas d’une voiture.

Résultat de recherche d'images pour "objet python"

On définit une classe « Voiture ».
Les objets de cette classe contiennent des attributs ou caractéristiques : « Marque », « Couleur », « Moteur », « Nombre de roues », etc.
Ainsi que des méthodes ou actions à effectuer : « Démarrer », « Accélérer », « Ralentir », etc.

Chaque objet sera ensuite défini selon ses attributs et ses méthodes, l’objet est alors une instance de la classe.

Nous pourrons donc définir des objets différents, par exemple :
– la voiture de Jonathan, qui est de couleur rouge avec une vitesse de 30 km/h,
– la voiture de Denis, qui est de couleur grise avec une vitesse de 50 km/h,
– etc.

Comment coder un objet en Python ?

On définit en premier la « class ».
Puis on ajoute un constructeur permettant qu’un certain nombre d’actions puissent être réalisées. Un constructeur n’est rien d’autre qu’une méthode, sans valeur de retour, qui porte un nom imposé par le langage Python : « __init__( ) ». Il peut avoir plusieurs paramètres, sachant qu’au minimum le paramètre « self » lui sera attribué.
Puis on incrémente avec d’autres méthodes permettant de caractériser chaque action de l’objet.

class Voiture ():
    def __init__(self, nom, couleur, vitesse):
        self.nom = nom
        self.couleur = couleur
        self.vitesse = vitesse
    def Avance(self):
        print("La voiture {} de {} roule à {} km/h ".format(couleur, nom, vitesse))

Voiture1 = Voiture("Jonhatan", "rouge", 30)
Voiture2 = Voiture("Denis", "grise", 50)

Voiture1.Avance()
La voiture rouge de Jonhatan roule à 30 km/h
Mise en application

J’ai donc décidé de retravailler mon code pour le jeu de la roulette en orienté objet.
Le code fera l’affaire d’un prochain post

À bientôt pour le découvrir ! 😉

Categories
Apprentissage Découverte Python

Le jeu du Pong

Vous connaissez tous le jeu du Pong ?

Mais si, le jeu du Pong c’est ce jeu où l’on doit faire rebondir une balle entre deux barres…
Vous ne voyez toujours pas ?

PongGame

Le voici :


Aujourd’hui je suis allée voir un tuto sur YouTube de FreeCodeCamp : https://youtu.be/XGf2GcyHPhc pour réaliser le jeu du Pong.

J’ai réalisé le jeu en même temps que la vidéo.
C’était ma petite partie récréative pour me réconcilier avec Python (car en ce moment j’ai une overdose du cours que je suis sur OpenClassrooms; et surtout des classes et méthodes qui sont pour moi imbuvables ! 😉 )

Alors le principe est simple : il faut créer une fenêtre avec des dimensions précises, des barres et une balle. Puis programmer pour que tout se déplace, que la balle rebondisse et que les scores s’affichent…

Simple comme bonjour ? Presque…

J’ai suivi la vidéo et j’ai dû faire quelques modifications pour que le programme marche sur mon ordinateur !

  • Tout d’abord, j’ai fait des erreurs de frappe. Par exemple pour le déplacement des barres, j’ai oublié de mettre le signe négatif pour le déplacement en bas… Ce qui fait que, quelle que soit la touche paramétrée utilisée, ma barre se déplaçait uniquement en haut !
# Function
def paddle_a_up():
    y = paddle_a.ycor()
    y += 20
    paddle_a.sety(y)

def paddle_a_down():
    y = paddle_a.ycor()
    y += -20
    paddle_a.sety(y)
  • Le déplacement de la balle était bien trop rapide avec une valeur de 2. J’ai donc diminué progressivement jusqu’à 0.1 pour que la balle se déplace suffisamment lentement pour pouvoir jouer sans perdre dès le début !
ball.dx = 0.1			# speed
ball.dy = -0.1			# speed
  • Lorsque je suis passée au codage du déplacement de la balle, la balle doit toujours se retrouver au milieu après être sortie sur un côté. Mon code a marché lorsque j’ai supprimé les espaces dans la ligne.
if ball.xcor() > 390:  # right side of the screen
    ball.goto(0,0)
    ball.dx *= -1

if ball.xcor() < -390:  # left side of the screen
    ball.goto(0,0)
    ball.dx *= -1
  • Pour les conditions permettant à la balle de « rebondir » sur les barres, je n’avais pas mis toutes les parenthèses nécessaires. Ce qui provoquait un arrêt du programme…
# Paddle and ball collisions
if (ball.xcor() > 340 and ball.xcor() < 350) and (ball.ycor() < paddle_b.ycor() + 40 and ball.ycor() > paddle_b.ycor() -40):
    ball.setx(340)
    ball.dx *= -1

if (ball.xcor() < -340 and ball.xcor() > -350) and (ball.ycor() < paddle_a.ycor() + 40 and ball.ycor() > paddle_a.ycor() -40):
    ball.setx(-340)
    ball.dx *= -1

Finalement, ce moment récréatif a été très instructif !
En effet, même en ayant le modèle sous les yeux, j’ai eu quelques bugs qui m’ont permis de réfléchir et donc de m’améliorer !!! 🙂

De plus j’ai découvert une nouvelle bibliothèque : « turtle » qui permet notamment de dessiner des lignes. Et ça c’est top ! 😎


Et voici le code final !

# Simple Pong
# By @TokyoEdTech

import turtle

wn = turtle.Screen()
wn.title("Pong by @TokyoEdTech")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)

# Score
score_a = 0
score_b = 0

# Paddle A
paddle_a = turtle.Turtle()
paddle_a.speed(0)
paddle_a.shape("square")
paddle_a.color("white")
paddle_a.shapesize(stretch_wid=5, stretch_len=1)
paddle_a.penup()
paddle_a.goto(-350, 0)

# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("white")
paddle_b.shapesize(stretch_wid=5, stretch_len=1)
paddle_b.penup()
paddle_b.goto(350, 0)

# Ball
ball = turtle.Turtle()
ball.speed(0)
ball.shape("square")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.dx = 0.2			# speed
ball.dy = -0.2			# speed

# Pen
pen = turtle.Turtle()
pen.speed(0)
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("Player A: 0  Player B: 0", align="center", font=("Courier", 24, "normal"))

# Function
def paddle_a_up():
    y = paddle_a.ycor()
    y += 20
    paddle_a.sety(y)

def paddle_a_down():
    y = paddle_a.ycor()
    y += -20
    paddle_a.sety(y)

def paddle_b_up():
    y = paddle_b.ycor()
    y += 20
    paddle_b.sety(y)

def paddle_b_down():
    y = paddle_b.ycor()
    y += -20
    paddle_b.sety(y)

# Keyboard binding
wn.listen()
wn.onkeypress(paddle_a_up, "a")
wn.onkeypress(paddle_a_down, "q")
wn.onkeypress(paddle_b_up, "p")
wn.onkeypress(paddle_b_down, "m")

# Main game loop
while True:
    wn.update()

    # Move the ball
    ball.setx(ball.xcor() + ball.dx)
    ball.sety(ball.ycor() + ball.dy)

    # Border checking
    if ball.ycor() > 290:    # top of the screen
        ball.sety(290)
        ball.dy *= -1

    if ball.ycor() < -290:   # bottom of the screen
        ball.sety(-290)
        ball.dy *= -1

    if ball.xcor() > 390:  # right side of the screen
        ball.goto(0,0)
        ball.dx *= -1
        score_a += 1
        pen.clear()
        pen.write("Player A: {}  Player  B: {}". format(score_a, score_b), align="center", font=("Courier", 24, "normal"))

    if ball.xcor() < -390:  # left side of the screen
        ball.goto(0,0)
        ball.dx *= -1
        score_b += 1
        pen.clear()
        pen.write("Player A: {}  Player  B: {}". format(score_a, score_b), align="center", font=("Courier", 24, "normal"))

    # Paddle and ball collision
    if (ball.xcor() > 340 and ball.xcor() < 350) and (ball.ycor() < paddle_b.ycor() + 40 and ball.ycor() > paddle_b.ycor() -40):
        ball.setx(340)
        ball.dx *= -1

    if (ball.xcor() < -340 and ball.xcor() > -350) and (ball.ycor() < paddle_a.ycor() + 40 and ball.ycor() > paddle_a.ycor() -40):
        ball.setx(-340)
        ball.dx *= -1
Categories
Apprentissage Python

Deuxième TP, deuxième casse-tête !

Bonjour à tous ! 🙂

Voilà 3 jours que je travaille sur mon deuxième TP (quel casse-tête!) : le jeu du Pendu…
Et je vous avouerais que j’ai fait face à de nombreuses difficultés !

Après avoir bien visualisé mon code, puis commencé la rédaction simplifiée, je me suis lancée dans l’écriture complète du programme.
J’ai réalisé beaucoup d’essais pour réussir à faire fonctionner mon jeu.
Et notamment pour trouver comment :

Afficher le mot sous forme de mot mystère (avec des étoiles)

J’ai d’abord mis le mot sélectionné sous forme de liste en utilisant la recherche dans une chaîne de caractères :

mon_mot = [ lettre for lettre in m]

Ici, la liste – que j’ai nommée « mon_mot » – va être créée en prenant le mot « m » lettre après lettre et en ajoutant chaque caractère comme un objet de la liste.

Sur le même principe, j’ai créé le mot mystère comme étant une liste où chaque objet (lettre) de « mon_mot » est remplacé par une étoile.

mystere = [" * " for lettre in mon_mot]

Bonus : pour un affichage sans les crochets caractéristiques de la liste, j’ai utilisé le paramètre « en liste » lors de l’exécution de « print » :

print(*mystere)
Trouver la lettre demandée dans le mot (surtout quand il y a plusieurs fois la même lettre !)

Ici, j’ai créé une boucle de recherche dans toute la liste pour que toutes les lettres identiques puissent être trouvées.

J’ai d’abord demandé de compter le nombre de lettres identiques dans le mot :

compte_lettre = m.count(choix_lettre)

Puis j’ai mis comme paramètre d’arrêt de la boucle sur ce nombre :

i=0
while i != compte_lettre :
    rech_lettre = mon_mot.index(choix_lettre)
    mon_mot[rech_lettre] = "*"
    mystere[rech_lettre] = choix_lettre
    i += 1
Arrêter le programme lorsque le mot est trouvé

Ce point fut plus compliqué à démêler, car j’arrivais à finir le mot sans que le programme passe ensuite au calcul des scores…

Dans un premier temps, il faut arrêter la recherche de lettre.
Pour ça, il faut qu’à chaque lettre trouvée la longueur du mot « m » diminue.
Et j’ai mis une condition « if » sur cette longueur qui doit être strictement inférieure à 1 (si c’est à 0, après avoir trouvé toutes les lettres, le programme me demande encore une lettre !) :

long = len(m)
compte_lettre = m.count(choix_lettre)
if long > 1 :
    # recherche et remplacement de la lettre - voir au dessus #
    long = long - compte_lettre

La fin de la condition « if » ainsi créée permet ensuite de sortir du programme en ayant trouvé le mot. Et pour arrêter complètement la boucle, j’ai utilisé la fonction « break » :

else :
    print("\nBravo, vous avez trouvé le mot mystere : ", m )
    break

Casse-tête résolu ! 🙂
J’ai donc sorti un programme permettant de jouer au Pendu, dont voici le code :

# -*-coding:Latin-1 -*

# ************* Programme du jeu du Pendu ***************
import os
import random

print("Bienvenue dans le jeu du Pendu ! \n")

pseudo = input("Quel est votre nom ? ")  #*** joueur
score = 0   #*** score nul pour débuter
print("\nL'ordinateur va choisir aléatoirement un mot à découvrir.\n\
      Vous avez 8 chances pour y arriver ! \n\
      C'est parti...")
mot_mystere = ["vision", "bateau", "chouette", "bonjour", "amour", "festival"]
no_mot = random.randrange(6) # **** recherche aléatoire du mot dans liste données
m=mot_mystere[no_mot]
long = len(m)
print("\nLe mot mystère comporte ", long, " lettres à trouver :")
mon_mot = [ lettre for lettre in m]   # *** extraire le mot sous forme de liste par lettre
mystere = [" * " for lettre in mon_mot]   # *** remplace les lettres par une *
print(*mystere)
print("\nA vous de le trouver ! ")
essai = 8
while essai > 0 :
    choix_lettre = input("\nTapez une lettre :   ")
    choix_lettre = choix_lettre.lower()  # *** mettre la mettre en minuscule
    compte_lettre = m.count(choix_lettre)
    try :
        rech_lettre = mon_mot.index(choix_lettre)   # *** recherche la lettre dans le mot
    except ValueError :  # *** si la lettre n'est pas dans le mot
        try :
            choix_lettre != int(choix_lettre)  # *** vérifie que ce n'est pas un nombre
        except ValueError :
            print("Cette lettre n'est pas dans le mot mystère")
            essai = essai -1
            print("Il vous reste ", essai, " coups")
            coup_rest = essai
        else :
            print("Etes vous sûr de votre frappe ?")
    else :  
        if long > 1 :
            i=0
            while i != compte_lettre :   # *** si lettre ds mot, remplacer *
                rech_lettre = mon_mot.index(choix_lettre)
                mon_mot[rech_lettre] = "*"
                mystere[rech_lettre] = choix_lettre
                i += 1
            long = long - compte_lettre
        else :  # *** mot entièrement trouvé
            print("\nBravo, vous avez trouvé le mot mystere : ", m )
            break
        print(*mystere)
        print("Il vous reste ", essai, " coups")
# *** calcul du score
score = score + coup_rest
if coup_rest == 0 :  # *** mention spéciale si le mot n'a pas été trouvé
    print("\nVous avez perdu ! Le mot mystère était : ", m)
print("\n", pseudo, " , votre score est de : ", score, " points")

os.system("pause")   # met en pause le système Windows

Pour mémoire, voici le lien de l’énoncé : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/232565-tp-realisez-un-bon-vieux-pendu


Je vous vois venir…
Vous allez me dire :  » c’est bien beau tout ça, mais tu n’as pas réalisé le TP exactement comme demandé dans le cours ! »
Exact !
Tout simplement parce que je voulais vous proposer un début de solution à ce casse-tête avant de continuer à bosser dessus… Car je dois faire des recherches plus approfondies sur la lecture/écriture dans un fichier !


La suite dans un prochain post ! 😉

Categories
Apprentissage Conseil Python

Faire travailler ses méninges !

Aujourd’hui, j’ai travaillé d’arrache-pied sur mon 2ème TP : le jeu du Pendu.
Et pour une débutante comme moi, il y a beaucoup de travail… J’ai donc pas mal fait travailler mes méninges ! 😉

Pour mémoire, voici le lien vers le TP :
https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/232565-tp-realisez-un-bon-vieux-pendu 

Après avoir visualisé mon code, j’ai commencé à l’écrire.
J’ai d’abord codé les passages les plus faciles pour moi, et j’ai mis des commentaires pour les passages sur lesquels j’avais du mal.

Ensuite, j’ai fait des petits morceaux de tests pour vérifier que mon code fonctionnait comme demandé dans l’énoncé…
J’ai aussi fait des recherches sur les différentes fonctions à utiliser pour compléter certaines parties…

Petit à petit, mon code prend forme.
Et il va me falloir encore travailler quelques heures et faire plusieurs recherches pour le finaliser !


Je mets cette citation ici pour ne pas oublier que rien n’est désespéré !