我有下面的程序,用户输入一个数字an放在矩阵的位置上。
我试图,为了教学目的,解决它只使用选择(目前)。
您会注意到,它适用于所有数字,但0除外。最后一个elif是小于1 -e.g的数字。0。代码告诉它将X放置在0,0位置,但它将其放置在7中。
怎么回事?https://trinket.io/python/987e8c46d7
注意,我只添加了最后一个elif,因为第一个也应该处理小于7的数字的elif不起作用。我如何使用相同的结构来处理这个问题。
然后,我想在关注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()发布于 2021-12-16 20:45:07
您的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"
...发布于 2021-12-16 20:39:02
如果是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"发布于 2021-12-16 20:53:24
只需对第一个索引使用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)https://stackoverflow.com/questions/70385273
复制相似问题