我正在尝试解决此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时,我收到错误。
答案 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