Résolue

Est-il possible de stocker un f-string dans une variable sans qu'il s'affiche?

# Fonctions # Variables

Bonjour, je fais quelques tests de curiosité sur l'exercice du nombre mystère mais je n'arrive pas à rassembler mes esprits pour solutionner mon idée, je me demande toutefois si le concept est faisable, j'aurais beaucoup de mal à expliquer ce que je veux faire mais je suppose que ça peut se deviner en regardant le code :


import random

RANDOM_NB = random.randint(0,100)
i = 5
tries_number = print(f"Il te reste {i} essais")

while i > 0:
    if i == 1:
        # print(f"Il te reste {i} essai")
        tries_number[:-1]
    else:
        # print(f"Il te reste {i} essais")
        tries_number
        
# Le reste des instructions


Je voulais voir si il était possible d'empêcher d'afficher un f-string stocké dans une variable vu que je le déclare avant dans le but de l'appeler plus tard en le modifiant selon les cas... (je tiens à éviter la concaténation avec "+")


Soit dit en passant, y'a-t-il une vidéo Mentorats qui traite de la portabilité des variables? python semble avoir une logique différente de ce que j'ai déjà pu voir ailleurs

Merci

Bonjour Céline !


Je comprends tout à fait ta problématique et j'en parle justement dans cet article :

https://www.docstring.fr/blog/le-formatage-des-chaines-de-caracteres-avec-python/#lavantage-de-format-sur-les-f-string


C'est un des derniers avantages de la méthode format par rapport aux f-string puisque ça te permet de faire exactement ce que tu souhaites, à savoir déclarer une chaîne de caractères à un endroit et la remplir à un autre moment de ton script (ce que ne permettent pas les f-string qui sont évaluées directement).


Pour la portée des variables, j'en parle dans la formation sur les fonctions :

https://www.docstring.fr/formations/les-fonctions/la-portee-des-variables-183/?tab=summary


J'espère que cela répond à tes interrogations :) N'hésite pas si tu as besoin de plus de précisions après la lecture et le visionnement de ces liens.


Bonne continuation !

Merci, j'avais complètement oublié cette méthode, ça fonctionne :) je pense que dorénavant j'aurais la présence d'esprit de les utiliser lorsque je tomberai sur des valeurs dynamiques en plein milieu d'une str.


J'ai visionné la vidéo "Espace global et local", c'est exactement la même chose que dans les autres langages que j'ai survolé, néanmoins il me reste un problème de compréhension dans ce même exemple, je vois bien que ma variable "MSG" est accessible depuis le bloc de condition qu'elle soit déclaré en global ou non mais en global, ma décrémentation ne fonctionne plus

import random

RANDOM_NB = random.randint(0,100)
i = 5
tries_number = "Il te reste {nb} essais"
# MSG = tries_number.format(nb = i)
while i > 0:
    MSG = tries_number.format(nb = i)
    if i == 1:
        print(MSG[:-1])
    else:
        print(MSG)
    i = i-1

Salut Céline,


Alors attention pour les espaces, une boucle ou une structure conditionnelle ne forment pas un nouvel espace. Ta variable MSG est donc dans le même espace global de ton script que tu la déclare avant la boucle ou à l'intérieur.


La différence c'est qu'en la déclarant avant ta boucle, tu ne la déclare qu'une fois, avec la valeur de i (5) qui est assignée au début du script.


Tu fais ensuite un print de ta variable qui affiche donc toujours qu'il te reste 5 essai car tu ne refais pas un nouveau format.


Dans le cas de figure dans lequel tu déclares ta variable MSG à l'intérieur de ta boucle, tu la redéclare à chaque itération de la boucle, en formattant avec la nouvelle valeur de i (qui passe ainsi de 5 à 4, à 3, à 2, etc). Le message est donc correctement modifié.


Donc là c'est un problème de logique et non d'espace :)


Est-ce que tu vois le souci ?

Merci, c'est compris effectivement en dehors de la boucle, ce n'est pas écrasé

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.