二维数组 Python 问题,if 的范围,elifs,一个没有按预期工作
2d array Python question, range of if, elifs, one not working as expected
我有以下程序,其中用户输入一个数字,X 放在矩阵的位置。
出于教学目的,我正在尝试仅使用选择来解决它(目前)。
您会注意到它适用于除 0 以外的所有数字。最后一个 elif 用于小于 1 的数字 - 例如0. 代码告诉它把 X 放在位置 0,0,但它却把它放在 7。
这是怎么回事?
https://trinket.io/python/987e8c46d7
注意,我只添加了最后一个 elif,因为第一个 elif 也应该处理小于 7 的数字,但它不起作用。我该如何使用相同的结构来处理这个问题。
然后我想在教学的基础上查看 if 语句并查看重复或不必要的复杂性区域,以表明它可以进一步简化以获得更优雅的代码。
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()
如果 number < 1
,则 number <= 7
,因此 if
语句中的第一个条件将在到达 number < 1
检查之前应用。这种情况下的余数是 0
,因此它将索引 matrix1[0][-1]
,这是该行中的最后一项。您应该将 number < 1
检查移至 if
语句的开头以解决此问题。另外,我认为您在该代码中有错字,因为您访问的是 matrix
而不是 matrix1
,并且您使用的是 ==
运算符而不是赋值。
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"
您的 el-if 语句应该如下所示。在您的实现中,当用户输入 0 作为输入数字时,代码进入 if number <=7
语句。所以,if number<1:
声明应该放在第一位。
...
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"
...
您可以更简单地通过对第一个索引使用 int 除法而不是使用一堆 if
语句将每个范围单独映射到相同的结果:
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()
---The Matrix---
Enter number: 0
X******
*******
*******
*******
*******
*******
*******
---The Matrix---
Enter number: 48
*******
*******
*******
*******
*******
*******
******X
如果您希望用户输入的数字为 1-49 而不是 0-48,只需在用户输入后从 number
中减去 1。您可以使用 min
和 max
:
“剪辑”低于 1 和高于 49 的输入
number = int(input("Enter number: ")) - 1
number = max(number, 0)
number = min(number, 48)
我有以下程序,其中用户输入一个数字,X 放在矩阵的位置。
出于教学目的,我正在尝试仅使用选择来解决它(目前)。
您会注意到它适用于除 0 以外的所有数字。最后一个 elif 用于小于 1 的数字 - 例如0. 代码告诉它把 X 放在位置 0,0,但它却把它放在 7。
这是怎么回事? https://trinket.io/python/987e8c46d7
注意,我只添加了最后一个 elif,因为第一个 elif 也应该处理小于 7 的数字,但它不起作用。我该如何使用相同的结构来处理这个问题。
然后我想在教学的基础上查看 if 语句并查看重复或不必要的复杂性区域,以表明它可以进一步简化以获得更优雅的代码。
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()
如果 number < 1
,则 number <= 7
,因此 if
语句中的第一个条件将在到达 number < 1
检查之前应用。这种情况下的余数是 0
,因此它将索引 matrix1[0][-1]
,这是该行中的最后一项。您应该将 number < 1
检查移至 if
语句的开头以解决此问题。另外,我认为您在该代码中有错字,因为您访问的是 matrix
而不是 matrix1
,并且您使用的是 ==
运算符而不是赋值。
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"
您的 el-if 语句应该如下所示。在您的实现中,当用户输入 0 作为输入数字时,代码进入 if number <=7
语句。所以,if number<1:
声明应该放在第一位。
...
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"
...
您可以更简单地通过对第一个索引使用 int 除法而不是使用一堆 if
语句将每个范围单独映射到相同的结果:
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()
---The Matrix---
Enter number: 0
X******
*******
*******
*******
*******
*******
*******
---The Matrix---
Enter number: 48
*******
*******
*******
*******
*******
*******
******X
如果您希望用户输入的数字为 1-49 而不是 0-48,只需在用户输入后从 number
中减去 1。您可以使用 min
和 max
:
number = int(input("Enter number: ")) - 1
number = max(number, 0)
number = min(number, 48)