IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Affichage d'une forme en triangle à partir de caractères.Python [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Par défaut Affichage d'une forme en triangle à partir de caractères.Python
    Bonjour,

    J'ai un algorithme qui fonctionne pour tous les chiffres, sauf pour le nombre "2" et je n'arrive pas à trouver la solution, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    r = int(input())
    i = 0
     
    print("@", end="\n")
    while i < r-2:
     
     
        print("@" + (" "*(i) + "@"),end = "\n")
        if i == r-3:
            print("@"*(i+3), end="\n")
     
        i +=1
    Pour le chiffre "6" cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    6
    @
    @@
    @ @
    @  @
    @   @
    @@@@@@
    Ce qui est bon. Mais pour le chiffre "2" j'ai :

    Au lieu de :

    Toute aide sera la bienvenue !

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par pyhead Voir le message
    J'ai un algorithme qui fonctionne pour tous les chiffres, sauf pour le nombre "2" et je n'arrive pas à trouver la solution
    As-tu remarqué l'instruction while i < r-2 ??? Que penses-tu qu'il se passe quand "r" vaut 2 ?????

    Citation Envoyé par pyhead Voir le message
    Toute aide sera la bienvenue !
    Aide pour quoi faire ??? Pour faire que ça fonctionne avec "2" ? Ben la pire des choses en prog est de partir sur des cas particuliers. Tu veux afficher un triangle de "n" lignes tu fais une boucle de 1 (inclus) à n inclus et dans la boucle tu gères ce qui doit se passer.
    Comme ça si ça fonctionne avec 18 alors ça fonctionnera avec 2...

    Et une fois que l'algo fonctionne pour tous les nombres, là tu peux te pencher sur les cas particuliers. Donc ici le cas "1" étant lui vraiment à part lui tu peux alors le mettre "à part".

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    r = int(input()) 
    print("@")
    for i in range(2, r+1):
    	print("@" + (" " if i < r else "@")*(i-2) + "@")
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    La dernière ligne est tout aussi particulière que la première !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    print("@", end="\n")
    while i < r-2:
        print("@" + (" "*(i) + "@"),end = "\n")
        i +=1
     
    if r>1 :
        print("@"*r, end="\n")

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    La dernière ligne est tout aussi particulière que la première !
    C'est vrai que l'intégrer dans la boucle est assez moyen. Ca oblige à la checker à chaque itération.

    Citation Envoyé par lg_53 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if r>1 :
        print("@"*r, end="\n")
    Dans ce cas, alors on peut optimiser encore plus si on intègre tout le corps de boucle dans l'alternative.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    r=int(input(""))
    print("@", end="\n")
    if r>1 :
    	for i in range(r-2):
    		print("@" + (" " * i + "@"), end="\n")
     	print("@" * r, end="\n")
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2019
    Messages : 4
    Par défaut Affichage d'une forme en triangle à partir de caractères. Résolu.
    J'ai finalement modifié mon code pour que ça marche pour tout les chiffres, car en effet comme tu la souligné Sve@r avec la boucle "while" s'est pas correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    i = -1
     
    print("@", end="\n")
    while i < r-2:
        if i == -1:
            i = 0
        print("@" + (" "*(i) + "@"),end = "\n")
        if i == r-3:
            print("@"*(i+3), end="\n")
     
        i +=1
    Merci pour votre aide.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pyhead Voir le message
    car en effet comme tu la souligné Sve@r avec la boucle "while" s'est pas correct :
    C'est pas vraiment le souci du while, c'est surtout le souci que pour "r=2", la boucle ne se fait pas (et c'est pareil avec mon for). Et donc même dans ce cas il faut quand-même afficher la dernière ligne !!!
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    r=int(input(""))
    print("@", end="\n")
     
    if r>1:
    	i=0
    	while i < (r-2):
    		print("@" + (" " * i + "@"), end="\n")
    		i+=1
    	print("@" * r, end="\n")
    et ensuite si on remplace le i=0; while i < (r-2); i+=1 par un for i in range(n-2) c'est autant ça de gagné.

    Citation Envoyé par pyhead Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    i = -1
     
    print("@", end="\n")
    while i < r-2:
        if i == -1:
            i = 0
        print("@" + (" "*(i) + "@"),end = "\n")
        if i == r-3:
            print("@"*(i+3), end="\n")
     
        i +=1

    Sans déconner, as-tu remarqué que tous nos codes à lg_53 et à moi-même, même si on les a mutuellement un peu critiqués l'un/l'autre , étaient quand-même 1) fonctionnels 2) dix fois plus simples et limpides que cette bouse ??? i=-1 puis si i == -1 alors i=0 !!!
    En effet, pourquoi faire simple quand on peut faire branquignole...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme d'affichage d'une forme a partir d'un menu
    Par tipa42 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/11/2010, 02h38
  2. Affichage d'une form a partir d'un thread
    Par spy1 dans le forum C#
    Réponses: 1
    Dernier message: 26/05/2007, 23h06
  3. Réponses: 2
    Dernier message: 28/06/2006, 16h50
  4. Affichage d'une forme transparente
    Par cedekasme dans le forum MFC
    Réponses: 5
    Dernier message: 11/01/2006, 15h44
  5. Evénement après l'affichage d'une Form
    Par nikhil dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/06/2005, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo