1
votes

Utiliser les alphabets pour obtenir ce modèle dans PYTHON

Le modèle souhaité est le suivant

 entrez la description de l'image ici

UTILISATION DE CE CODE

      A 
    B C 
  D E F 
G H I J  

Je reçois ce modèle:

order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    for k in range(1,d+1):
        #c=c-1
        print(chr(c),end=" ")
        c=c+1
    d=d+1
    print()


0 commentaires

3 Réponses :


1
votes

Lorsque vous imprimez (chr (c)) , vous devez essentiellement inverser la direction dans laquelle c se déplace puisque vous souhaitez imprimer les lettres dans l'ordre inverse. Ceci est assez simple et peut être fait avec juste quelques lignes supplémentaires.

Premièrement, c doit commencer à la dernière (par ordre alphabétique) valeur ascii pour le caractère que vous voulez imprimer (sur cette ligne spécifique). Cela se fait en disant c + = d juste avant votre boucle for k for.

Ensuite, puisque nous allons en arrière, nous devons décrémenter c de 1 à chaque fois. Nous ajoutons c - = 1 au tout début de votre boucle for k .

Enfin, nous devons pousser c code > retour à la lettre suivante. Puisque nous avons imprimé des lettres d , nous ajoutons simplement c + = d après la boucle for k . Ce dernier élément peut sembler un peu déroutant. A titre d'exemple, l'une des lignes imprimées est J I H G . Après avoir imprimé cette ligne, c a la valeur ascii de G mais nous voulons pouvoir imprimer la lettre suivante après J et non G , c'est pourquoi nous ajoutons à nouveau la valeur de d .

Le code complété est

Enter the order : 6
            A
          C B
        F E D
      J I H G
    O N M L K
  U T S R Q P

Output:

order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    c += d
    for k in range(d):
        c -= 1
        print(chr(c),end=" ")
    c += d
    d += 1
    print()

PS final

  1. Au lieu d'écrire x = x + 1 , il est plus pythonique de dire x + = 1 . C'est le cas de toutes les autres opérations mathématiques. x = x * 3 peut être réécrit comme x * = 3 .
  2. pour k dans l'intervalle (1, d + 1) peut être écrit plus succinctement comme pour k dans l'intervalle (d)


1 commentaires

Merci pour la réponse, également pour les suggestions. Je suis un nouveau codeur donc je ne suis pas très familier avec les versions courtes.



1
votes

En utilisant la même approche, changer légèrement votre deuxième boucle interne et comment vous mettez à jour c devrait fonctionner:

Enter the order : 4
          A 
        C B 
      F E D 
    J I H G 

Renvoie

order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    for k in range(0, d):         # iter from 0 to number of letters in the row
        print(chr(c - k),end=" ") # backtrack from starting letter
    d=d+1                         # increment d before updating c
    c = c + d                     # update c to be the starting letter of the next row
    print()


0 commentaires

1
votes

Voici une méthode plus simple pour créer votre sortie.

        A
      C B
    F E D
  J I H G
O N M L K

Sortie :

cols = int(input("Enter the order : "))
end = cols - 1
c = ord('A')
for r in range(cols):
    l = [chr(c+count) for count in range(cols-end)]
    c=c+len(l)
    l.extend(' '*end)
    end = end -1
    l.reverse()
    print(' '.join(l))


0 commentaires