Résolue

Evaluation des variables dans une chaîne de caractères

# Affichage # Chaînes de caractères # Variables

Bonjour,

Afin d'éviter de saisir plusieurs fois dans le code le même texte à afficher à l'écran, j'ai ajouté ces textes dans des constantes en début de code comme indiqué ci-après :

points_vie_infliges = 0

MES_RESULTATS = f"Vous avez infligé {points_vie_infliges} points de dégats à l'ennemi"
SES_RESULTATS = f"L'ennemi vous a infligé {points_vie_infliges} points de dégats"

Plus loin dans le code, j'exploite les constantes de la manière suivante :

if user_choice == "1":

        points_vie_infliges = randint(5, 10)    
        ses_points_vie = ses_points_vie - points_vie_infliges

        if ses_points_vie > 0:

            print(MES_RESULTATS)

            points_vie_infliges = randint(5, 15)
            mes_points_vie = mes_points_vie - points_vie_infliges

            if mes_points_vie > 0:

               print(SES_RESULTATS)

Le résultat est le suivant :
Souhaitez-vous attaquer (1) ou utiliser une potion (2) ?1
Vous avez infligé 0 points de dégats à l'ennemi
L'ennemi vous a infligé 0 points de dégats
Il vous reste 20 points de vie
Il reste 11 points de vie à l'ennemie

J'en conclue que ma variable points_vie_infliges est évaluée dans ma chaîne de caractères au moment de l'initialisation de ma constante et non pas au moment où j'utilise ma constante dans le print. Ce qui est logique.

Existe t-il un moyen d'indiquer à quel moment on souhaite évaluer les variables inclus dans une chaîne de caractèrs ?

Merci

Thibault houdon

Mentor

Bonjour Marc,

C'est effectivement un des seul cas d'usage qu'il reste pour l'ancienne façon de formater les chaînes de caractères avec la méthode format.

J'en parle dans cette partie de notre article complet sur le formatage des chaînes de caractères. Je vous conseille de lire l'article en entier pour bien comprendre l'intérêt de chaque méthode :)

Bonne continuation !

Top merci :)

Bonjour,

J'ai remplacer les f-string par format afin de pouvoir intégrer mes textes dans des constantes. Dans f-string, il est possible d'insérer du code python pour permettre par exemple, de conditionner l'affichage du "s".

J'ai voulu faire la même chose avec format mais cela me retourne une erreur. Vous me confirmez que cela n'est pas possible ? Existerait-il une astuce pour pouvoir gérer cette problématique du pluriel au sein d'une fonction format ?

Merci

Thibault houdon

Mentor

Bonjour Marc,

Oui c'est possible, il faut faire attention aux guillemets et autres pour ne pas avoir d'erreurs de syntaxe.

Possible en une ligne avec un opérateur ternaire :

aliment = "pomme"
nombre = 2
chaine = "J'ai acheté {quantite} {aliments}"

resultat = chaine.format(quantite=nombre, aliments=aliment + "s" if nombre > 1 else aliment)
print(resultat)

Ou avec une variable intermédiaire et une structure conditionnelle :

aliment = "pomme"
nombre = 2
chaine = "J'ai acheté {quantite} {aliments}"

if nombre > 1:
    aliments_resultat = aliment + "s"
else:
    aliments_resultat = aliment

resultat = chaine.format(quantite=nombre, aliments=aliments_resultat)
print(resultat)

La première méthode est plus élégante :) Merci

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.