首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2d数组Python问题,如果范围,elifs,一个不按预期工作

2d数组Python问题,如果范围,elifs,一个不按预期工作
EN

Stack Overflow用户
提问于 2021-12-16 20:32:46
回答 3查看 47关注 0票数 -1

我有下面的程序,用户输入一个数字an放在矩阵的位置上。

我试图,为了教学目的,解决它只使用选择(目前)。

您会注意到,它适用于所有数字,但0除外。最后一个elif是小于1 -e.g的数字。0。代码告诉它将X放置在0,0位置,但它将其放置在7中。

怎么回事?https://trinket.io/python/987e8c46d7

注意,我只添加了最后一个elif,因为第一个也应该处理小于7的数字的elif不起作用。我如何使用相同的结构来处理这个问题。

然后,我想在关注if语句的教学基础上,研究重复或不需要复杂的地方,以表明它可以进一步简化,以获得更优雅的代码。

代码语言:javascript
复制
def matrix():
  print("---The Matrix---")
  #create a 1d array of 7 stars
  matrix1=[
  ["*","*","*","*","*","*","*"],
  ["*","*","*","*","*","*","*"],
  ["*","*","*","*","*","*","*"],
  ["*","*","*","*","*","*","*"],
  ["*","*","*","*","*","*","*"],
  ["*","*","*","*","*","*","*"],
  ["*","*","*","*","*","*","*"]
  ]
  #user enters a number
  number=int(input("Enter number:"))
  #you are always finding the remainder on each row to place the X
  remainder=number%7
  
  #an 'X' is placed in the position of the number
  #remainder-1 because we start at index 0
  
  if number<=7:
    matrix1[0][remainder-1]="X"
  elif number>7 and number<15:
    matrix1[1][remainder-1]="X"
  elif number>14 and number<22:
    matrix1[2][remainder-1]="X"
  elif number>21 and number<29:
    matrix1[3][remainder-1]="X"
  elif number>28 and number<36:
    matrix1[4][remainder-1]="X"
  elif number>35 and number<43:
    matrix1[5][remainder-1]="X"
  elif number>42 and number<50:
    matrix1[6][remainder-1]="X"
  elif number<1:
    matrix[0][0]=="X"


  #the updated matrix is printed.
  print(matrix1)
matrix()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-12-16 20:45:07

您的el-if语句应该如下所示。在您的实现中,当用户输入0作为输入号时,代码会变成if number <=7语句。因此,if number<1:语句应该放在第一位。

代码语言:javascript
复制
...

  if number<1:
    matrix1[0][0]="X"
  elif number<=7:
    matrix1[0][remainder-1]="X"
  elif number>7 and number<15:
    matrix1[1][remainder-1]="X"
  elif number>14 and number<22:
    matrix1[2][remainder-1]="X"
  elif number>21 and number<29:
    matrix1[3][remainder-1]="X"
  elif number>28 and number<36:
    matrix1[4][remainder-1]="X"
  elif number>35 and number<43:
    matrix1[5][remainder-1]="X"
  elif number>42 and number<50:
    matrix1[6][remainder-1]="X"

...
票数 1
EN

Stack Overflow用户

发布于 2021-12-16 20:39:02

如果是number < 1,那么number <= 7,那么if语句中的第一个条件将在到达number < 1检查之前应用。在这种情况下,剩下的是0,因此它将索引matrix1[0][-1],这是该行中的最后一项。您应该将number < 1检查移到if语句的开头,以解决这个问题。另外,我认为这段代码有一个错误,因为您访问的是matrix而不是matrix1,您使用的是==运算符而不是赋值。

代码语言:javascript
复制
  if number < 1:
    matrix1[0][0] = "X"
  elif number<=7:
    matrix1[0][remainder-1]="X"
  elif number>7 and number<15:
    matrix1[1][remainder-1]="X"
  elif number>14 and number<22:
    matrix1[2][remainder-1]="X"
  elif number>21 and number<29:
    matrix1[3][remainder-1]="X"
  elif number>28 and number<36:
    matrix1[4][remainder-1]="X"
  elif number>35 and number<43:
    matrix1[5][remainder-1]="X"
  elif number>42 and number<50:
    matrix1[6][remainder-1]="X"
票数 1
EN

Stack Overflow用户

发布于 2021-12-16 20:53:24

只需对第一个索引使用int除法就可以做到这一点,而不是让一堆if语句单独将每个范围映射到相同的结果:

代码语言:javascript
复制
def matrix():
    print("---The Matrix---")
    # create a 2d array of 7x7 stars
    matrix1 = [["*" for _ in range(7)] for _ in range(7)]

    number = int(input("Enter number: "))
    matrix1[number // 7][number % 7] = "X"

    # print the matrix
    print('\n'.join(''.join(row) for row in matrix1))


matrix()
代码语言:javascript
复制
---The Matrix---
Enter number: 0
X******
*******
*******
*******
*******
*******
*******
代码语言:javascript
复制
---The Matrix---
Enter number: 48
*******
*******
*******
*******
*******
*******
******X

如果您希望用户输入的数字从1-49变为0-48,只需在用户输入后从number中减去1即可。您可以使用minmax“剪辑”1以下和49以上的输入。

代码语言:javascript
复制
number = int(input("Enter number: ")) - 1
number = max(number, 0)
number = min(number, 48)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70385273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档