我正在尝试编写一个程序,该程序可以在while循环中根据用户输入修改矩阵,并继续接收输入,直到用户输入字符串为止。
这基本上是我的最终目标:
for a matrix i=[[0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0]]
user input:
2
3
3
3
t
for user inputs, the first integer specifies the row, and the next one following it specifies the column.
expected output: i=[[0,0,0,0,0], [0,0,1,0,0], [0,0,1,0,0], [0,0,0,0,0]]
我尝试了几种方法,但仍然无法获得想要的结果:
while True:
x=input()
y=input()
if type(y)==int and type(x)==int:
i[x][y]=1
else:
break
print(i)
This outputs original configuartion [[0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0]]
我也尝试过这个:
while True:
x=input()
y=int(input())
i[x][y]=1
if x=="t":
break
print(i)
outputs TypeError: list indices must be integers or slices, not str
答案 0 :(得分:0)
input()返回一个'str',所以i [x]引发'列表索引必须是整数或切片,而不是str'
答案 1 :(得分:0)
您在这里面临几个问题。
首先,必须将输入转换为列表索引,但前提是第一个输入(x)不是't'。 我在循环开始时添加了此比较,因此我们无需担心y就终止循环。
然后,将输入x和y都转换为int(使用int()),我们从每个输入中减去1,因为我了解用户必须输入“自然”矩阵索引(从1开始),而不是python索引(从零开始)。
mat = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
while True:
x = input()
if x is 't':
break;
else:
xi = int(x) - 1
yi = int(input()) - 1
mat[xi][yi] = 1
print(mat)
请注意,实际上将在此处进行进一步的输入检查,但对于此答案,我将其保留为最小。
输入检查功能的示例如下:
def check_x(x_local):
if len(x_local) is not 1:
raise ValueError()
return x_local
如果输入的输入内容不是单个字符,则会触发异常。 然后,您可以像这样在主程序中调用它:
x = check_x(input())
答案 2 :(得分:0)
这可以解决问题:)在索引过程中而不是在input()上进行一些重新排序和类型转换,也解决了许多其他问题
i=[[0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0]]
while True:
x=input()
y=input()
""" As we're unsure when we'd like to break, lets assume t could be in x or y """
if x == "t" or y == "t":
break
""" Convert both inputs to ints """
else:
i[int(x)][int(y)]=1
print(i)