2017-10-01 10 views
1

アスタリスクの外に矢印を作成しようとしています。はい、私はこれを達成するために、ループのために使用する方法を知っていますか:アスタリスクの矢印を印刷するPythonのWhileループのみを使用する

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 
* 
* 
    * 
* 
* 
""" 

私の質問は、私は唯一のwhileループを使用して同じ結果を達成する方法を、ですが?

おかげ

編集:私は、私は自分自身をそれをうまくしようとしている中で、これまで持っていたもの投稿するつもりだったが、それは役に立たない今です! 効率的なさまざまな回答をいただきありがとうございます。とても有難い!

+0

そして、あなたはあなたの目標を達成しようとしたでしょうか? –

答えて

1

これは、実行する必要があります。

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

まず、それが機能を使用することをお勧めします。そして、character*numbercharacterを連結して返すことを知っていれば、より簡単にnumber回連結します。

例:

'*'*10 

戻り

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

のでwhilesを使用して、あなたのプログラムが同じロジックをたどります。

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

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

最初しばらくは上部を印刷し、最後の一つはi = k-1が、これだけ逆の順序で同じことを行うという事実を使用しています。

例:

print_arrow(3) 

戻り

* 
* 
    * 
* 
* 
2

楽しみのためだけに、ここでのループインデックスを使用していないバージョンがあります。

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) 

出力

*  
* 
    * 
    * 
    * 
* 
* 
関連する問題