如何在while循环中用用户输入修改矩阵,并在用户输入字符串时中断?

时间:2019-03-24 14:37:50

标签: python python-3.x loops input while-loop

我正在尝试编写一个程序,该程序可以在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

3 个答案:

答案 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)