Remplacer print par une variable

NoobPython -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Question d'énorme débutant sur python, je galère sur la syntaxe depuis un moment donc je viens ici pour comprendre un peu mieux les problématiques que je rencontre
J'ai un script qui génère un carré en fonction de la longueur que j'indique (juste les contours pas l'intérieur) et tout fonctionne avec le code ci-dessous.

Cependant je veux remplacer mes
print
par un string mais je galère avec le
end = '  '
car je n'arrive pas à l'intégrer à la variable.

Merci pour votre aide !

#Saisie de la longueur du carré
longueur = int(input("Veuillez saisir la longueur du carré : "))

for i in range(longueur):
    for j in range(longueur):
        # Si c'est la première ou dernière position, on place un " x "
        if(i == 0 or i == longueur - 1 or j == 0 or j == longueur - 1):
            print('x', end = '  ')
        # Sinon on met un espace vide    
        else:
            print(' ', end = '  ')
    print()

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour
    Ta question n'est pas claire..

    Sachant que print est une fonction permettant d'afficher... Je ne comprends pas ce que la remplacer par une string signifie.

    Que comptes tu obtenir ?
    Qu'as tu essayé ?
    0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Quand tu fais un
    print
    , il faut bien comprendre qu'en réalité tu écris une chaîne de caractère dans un fichier particulier (appelée sortie standard, noté
    /dev/stdout
    sous linux). Tu peux donc choisir de faire plein de print de plein de petites chaînes de caractère, ou un seul print, avec une seule chaîne de caractère dans laquelle tu as concaténé toutes les petites chaînes de caractères.

    La fonction
    print
    .

    Quand tu écris en python :
    • print("toto")
      en réalité tu écris dans la sortie standard
      "toto\n"
      , où
      "\n"
      désigne le retour à la ligne. Le retour à la ligne implicitement ajouté est simplement dû au fait que la fonction
      print
      assigne au paramètre nommé
      end
      la valeur par défaut
      "\n"
      .
    • print("toto", end="\n")
      est donc complètement équivalent.
    • print("toto", end=" ")
      signifie que tu écrit
      "toto "
      (note la présence de l'espace en fin de chaîne) au lieu de
      "toto"
      .


    Concaténer des chaînes de caractères

    Il existe plusieurs approches :
    • Utiliser l'opérateur + : c'est la manière la plus simple (et sans doute la plus indiquée si tu débutes) ;

    s = "abc" + "def"
    print(s) # Affiche abcdef
    • Utiliser la méthode
      join
      de la classe
      str
      , c'est très pratique quand on peut itérer sur les bouts de chaînes à concaténer. A l'image du paramètre
      end
      de
      print
      , la méthode est prévue pour que le caractère qui relie les différentes sous chaînes puisse être choisi à la concaténation.

    s = ", ".join(["abc", "def", "ghi"])
    print(s) # Affiche abc, def, ghi
    • Utiliser StringIO : c'est une classe python qui permet d'avoir une notion de flux (au même titre que la sortie standard), sauf qu'ici on construit progressivement une chaîne.


    Puisqu'on parle des opérateurs sur les chaînes, un autre opérateur très utile pour ton problème est
    *
    .
    s = "abc" * 4
    print(s) # Affiche abcabcabcabc


    Comment adapter ton code

    Il suffit de créer en début de programme une variable
    s
    , intiialisée à
    ""
    et de remplacer les
    print
    par un ajout à la fin de s (ce qui s'écrit
    s = s + "toto"
    ou directement
    s += "toto"
    ).

    Le fait qu'il y a ait une chaîne ajoutée en plus avec le paramètre end ne change pas grand chose : print("toto", end="tata") devient juste
    s += "toto" + "tata"
    ou directement
    s += "tototata"
    .

    Comment j'aurais fait

    Dans ton cas, on peut voir ton problème comme le suivant. Notons
    n
    la largeur (bord compris de ton carré).

    Si n >= 2, le carré est constitué de :
    • Le haut du carré :
      n
      caractère
      "x"
      , suivi de
      "\n"
      .
    • Le milieu du carré :
      n - 2
      lignes, chacune formées du caractère
      "x"
      suivi de
      n - 2
      espaces, suivi du caractère
      "x"
      , , suivi de
      "\n"
      .
    • Le bas du carré :
      n
      caractère
      "x"
      (suivi éventuellement de
      "\n"
      ).


    Partant de là construire la chaîne de caractère correspondant à ton carré ne devrait pas poser de problème (si tu utilises habilement
    +
    et
    *
    , cela se fait en une ligne de python, même pas besoin de boucle
    for
    ).

    Voici à quoi ça pourrait ressembler :

    def carre(n, c="x"): 
        return (
            (       
                c * n + "\n" +
                (c + " " * (n - 2) + c + "\n") * (n - 2) +
                c * n   
            ) if n >= 2 else
            c if n == 1 else
            ""      
        )
    
    for n in [0, 1, 5]:
        print(carre(n))


    Bonne chance
    0