2017-10-30 13 views
0

宿題については、2次元のPythonリストでパターンを作成しようとしていますが、作業。私は[0] [9] [1] [8]、[2] [7] ... etc ... [9] [0]に「*」を入れようとしています。私は斜めの作品を残したが、右はしない混乱している?Python 3.x:2DリストとForループを使用したパターンの作成

また、私のコードは乱雑です - すべてのforループをまとめたり、より良い方法でタスクを進める方法はありますか?

ご協力いただきありがとうございます。

#Left, pattern I'm supposed to make. Right, what my code currently does. 
*---*---*    *---*----  
-*--*--*-    -*--*---- 
--*-*-*--    --*-*---- 
*********    ********* 
--*-*-*--    ----*-*-- 
-*--*--*-    ----*--*- 
*---*---*    ----*---* 


n = 9 
#but could be any odd number 

lst = [["-" for i in range(n)] for j in range(n)] 
#create matrix 

for i in range(n): #makes left diagonal 
    lst[i][i] = "*" 

for i in range(n): #middle horizontal section 
    lst[n//2][i] = "*" 

for i in range(n): 
    lst[i][n//2] = "*" #middle vertical section 

#for i in range(n, 0, -1): #one of many attempt at right diagonal section 
    # lst[i][i]= "*" #tried changing indexes and/or range but neither worked 

for i in lst: 
    print(*i) #pattern output 
+0

問題文を投稿することもできますか? – yash

答えて

2

これは、(あなたのコメント行の代わりに)正常に動作します:

for i in range(n): 
    lst[n-i-1][i]= "*" 

何このコードは行うことは最初の配列インデックス上、及び前方第二に、後方に行くことです。 -1は、範囲外になるインデックスnからの開始を避けるためのものです。

+0

ありがとう、このコードと説明は非常に便利です。私はn-iとn-1を試しましたが、n-i-1は考えていませんでした! – CoderBaby

1

多分このようなものを試すことができますか?いくつかの代わりに1つのループですべてを持っているだけですか?

for i in range(n): 
    lst[i][i] = "*" 
    lst[n//2][i] = "*" 
    lst[i][n//2] = "*" 
    lst[i][n-i-1] = "*" 
+0

これは素晴らしいです!どうもありがとう! – CoderBaby

関連する問題