2017-10-01 1 views
1

J'essaie de créer une flèche à partir d'astérisques, où la quantité de colonnes est entrée par l'utilisateur. Oui, je ne sais comment utiliser des boucles pour ce faire:Imprimer la flèche d'astérisque en utilisant uniquement les boucles While en Python

columns = int(input("How many columns? ")) 
while columns <= 0: 
    print ("Invalid entry, try again!") 
    columns = int(input("How many columns? ")) 
x = 1 

for x in range(1, columns): 
    for x in range(x): 
     print(" ", end="") 
    print("*") 

for x in range(columns,0,-1): 
    for x in range(x): 
     print(" ", end="") 
    print("*") 

#output looks like 

""" 
How many columns? 3 
* 
* 
    * 
* 
* 
""" 

Cependant ma question est, comment pourrais-je obtenir le même résultat en utilisant uniquement ou while?

Merci

Edit: je vais poster ce que j'avais jusqu'ici en essayant de le travailler moi-même, mais il est maintenant inutile! Merci à tous pour vos réponses variées efficaces! Très appréciée!

+0

Et qu'avez-vous essayé d'atteindre votre objectif? –

Répondre

1

Cela devrait faire:

columns = int(input("How many columns? ")) 


while columns <= 0: 
    print ("Invalid entry, try again!") 
    columns = int(input("How many columns? ")) 

x = 1 
while x < columns: 
    y = 0 
    while y < x: 
     print(" ", end="") 
     y += 1 
    print("*") 
    x += 1 


x = columns 
while x > 0: 
    y = 0 
    while y < x: 
     print(" ", end="") 
     y += 1 
    print("*") 
    x -= 1 
1

D'abord, il est préférable d'utiliser des fonctions. Et plus facile si vous savez que character*number renvoie character concaténée number fois.

Exemple:

'*'*10 

retours

'**********' 

Ainsi, votre programme en utilisant whiles suivrait la même logique.

def print_arrow(k): 
    i = 0 
    while(i < k-1): 
     print(i*' ' + '*') 
     i +=1 

    while(i >= 0): 
     print(i*' ' + '*') 
     i -= 1 

La première en imprime la partie supérieure, la dernière utilise le fait que i = k-1, donc juste faire même dans l'ordre inverse.

Exemple:

print_arrow(3) 

retours

* 
* 
    * 
* 
* 
2

Juste pour le plaisir, voici une version qui ne fonctionne pas en boucle en utilisant l'indexation.

def print_arrow(n): 
    a = '*'.ljust(n + 1) 
    while a[-1] != '*': 
     print(a) 
     a = a[-1] + a[:-1] 
    a = a[1:] 
    while a[0] != '*': 
     a = a[1:] + a[0] 
     print(a) 

# Test  
print_arrow(4) 

sortie

*  
* 
    * 
    * 
    * 
* 
*