Le modèle souhaité est le suivant
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()
3 Réponses :
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
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 . pour k dans l'intervalle (1, d + 1) peut être écrit plus succinctement comme pour k dans l'intervalle (d) 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.
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()
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))