从std输入python3

时间:2017-10-13 18:43:37

标签: python python-3.x

我正在尝试解决此URI问题https://www.urionlinejudge.com.br/judge/en/problems/view/1341 但是我得到了一个'ValueError:需要超过0的值来解包'。问题输入是:

第一行:int t (测试用例数)

测试用例的第一行:两个整数 H W (1≤ H W ≤ 20)。代表网格的维度。

下一个 H 行包含网格。

下一行:三个整数 N (0≤ N 500), X Y (1≤ X H ,1≤ Y W

下一行包含一串 N 字符,N,E,W,S分别代表北,西,南和东。第二个孩子的信息如下,格式相同。

示例输入:

1
3 4
ABCD
DEFG
ABCD
4 1 1
EEES
3 3 1
NES

问题是 N 可以是0.所以我必须从输入中读取一个0字符的字符串。

示例:

1
3 4
ABCD
DEFG
ABCD
0 1 1

3 3 1
NES

我要做的是:

t = int(input())
for x in range(n):
    H, W = [int(x) for x in input().split()]
    grid = []
    for i in range(H):
        grid.append([])
        line = str(input())
        for j in range(W):
            grid[i].append(line[j])
    steps, xZero, yZero = [int(x) for x in input().split()]
    directions = str(input()) # Here is the problem if steps == 0 I think
    # code for second kid
    steps, xZero, yZero = [int(x) for x in input().split()]
    directions = str(input())

对我来说,一个0字符的字符串是一个空行,在我的IDE上工作正常,但是当我提交给URI时,我收到错误。

1 个答案:

答案 0 :(得分:1)

有一百种方法可以解决这个问题。这里有三个更常见的。

此示例填充列表,然后修剪开头:

([int(x) for x in input().split()] + [0,0,0])[:4]

如果输入为1 2 3,则将其分解为:

[int(x) for x in ['1', '2', '3']] -> [ 1, 2, 3 ]
[ 1, 2, 3 ] + [ 0, 0, 0 ] -> [ 1, 2, 3, 0, 0, 0 ]
[ 1, 2, 3, 0, 0, 0 ][:4] -> [ 1, 2, 3 ]

但是,如果输入空字符串:

[int(x) for x in []] -> []
[] + [ 0, 0, 0 ] -> [ 0, 0, 0 ]
[ 0, 0, 0 ][:4] -> [ 0, 0, 0 ]

此示例检查len并填充数组,如果它太短:

 input = [int(x) for x in input().split()]
 i_len = len(input)
 if i_len < 3:
     input += [0] * (i_len - 3)
 else:
     input = input[:4]

如果输入为1 2 3,则将其分解为:

[int(x) for x in ['1', '2', '3']] -> [ 1, 2, 3 ]
[ 1, 2, 3 ][:4] -> [ 1, 2, 3 ]

如果你输入一个字符串w /&lt;但是,它会填充2个空格。输入1后,它将:

i_len -> 1
input -> [ 1 ]
i_len < 3 => (i_len - 1 = 2) * [0] -> [0,0]
input = [ 1, 0, 0 ]

这个缩短了一点:

input = [int(x) for x in input().split()]
i_len = len(input)
input += (3 - i_len) * [0]

此示例使用try ... except:

 try:
    steps, xZero, yZero = [int(x) for x in input().split()]
 except IndexError:
    steps, xZero, yZero = 0, 0, 0