【问题标题】:Python 3.x: Creating Patterns with 2D Lists and For LoopsPython 3.x:使用 2D 列表和 For 循环创建模式
【发布时间】:2018-04-12 00:46:08
【问题描述】:

对于家庭作业,我正在尝试在二维 Python 列表中创建一个模式,但下面关于右对角线部分的部分(近端)不起作用。我试图将“*”放在 [0][9] 然后 [1][8]、[2][7]...等...[9][0]。我很困惑左对角线有效而右对角线无效?

我的代码也看起来很乱 - 有没有办法将所有 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

【问题讨论】:

  • 您也可以发布问题陈述吗?

标签: python-3.x list for-loop multidimensional-array range


【解决方案1】:

这很好用(代替您的注释行):

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

这段代码的作用是在第一个数组索引处向后移动,在第二个数组索引处向前移动。 -1 是为了避免从索引 n 开始,这会越界。

【讨论】:

  • 谢谢,这段代码和解释很有帮助。我试过 n-i 和 n-1,但没有想到 n-i-1!
【解决方案2】:

也许你可以尝试这样的事情?将所有内容都放在一个循环中而不是多个?

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

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2018-08-11
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多