没有足够的值来解包

  • 本文关键字: python
  • 更新时间 :
  • 英文 :


给定两个数组ab,每个数组由n正整数和一个整数x组成。请确定是否可以重新排列b的元素,以便ai+bi≤x保留每个i(1≤i≤n)。

这是codeforces 1445A的问题。测试用空白行

分隔输入

4
3 4
1 2 3
1 1 2
2 6
1 4
2 5
4 4
1 2 3 4
1 2 3 4
1 5
5
5

输出
Yes
Yes
No
No

我用python写了下面的代码。提交代码后,我得到了一个运行时错误。当我输入手动代码工作得很好。这段代码有什么问题?读取输入文件时?如何解决这个问题?

import sys
def get_list():
return list(map(int, sys.stdin.readline().strip().split()))
def get_ints():
return map(int, sys.stdin.readline().strip().split())
tests = int(input())
while tests != 0:
size, limit = [int(x) for x in input().split()]
p = get_list()
q = get_list()
for i in range(size):
if p[i] + q[size-i-1] > limit:
print("No")
break
else:
print("Yes")
tests = tests - 1

错误在这里

size, limit = [int(x) for x in input().split()]

您需要忽略每个测试

之间的空行从这个

开始
def test(l1, l2, l3):
''' returns Yes or No '''
pass  # TODO: implement this
tests = int(input())
while tests > 0:
numbers = get_list()
if not numbers:
continue
p = get_list()
q = get_list()
print(test(numbers, p, q))
tests -= 1

另外,我怀疑你的print("Yes")不是正确地打算在循环

我认为在测试输入中有一个空行,在测试之间是预期的,所以当你试图split它时,你会得到一个空列表[]而不是[<int 1>, <int 2>],然后解包并将其分配给sizelimit,这将导致运行时异常。为了解决这个问题,我认为您可以将大小和限制的输入存储到变量中(在本例中为inp),并检查它是否为空行。如果是,那么您只需跳过它并获得下一行输入

inp = input()
if inp.strip() == '':
continue
size, limit = [int(x) for x in inp.split()]
所以你会得到下面的代码
import sys
def get_list():
return list(map(int, sys.stdin.readline().strip().split()))
def get_ints():
return map(int, sys.stdin.readline().strip().split())
tests = int(input())
while tests != 0:
inp = input()
if inp.strip() == '':
continue
size, limit = [int(x) for x in inp.split()]
p = get_list()
q = get_list()
for i in range(size):
if p[i] + q[size-i-1] > limit:
print("No")
break
else:
print("Yes")
tests = tests - 1

代码强制问题在查询之间包含换行符是不常见的,但这正是让您困惑的地方。你可以添加

if tests > 0:
input()

放在while循环的末尾,以使其正常运行。注意,这里的数组元素不超过1000个,不需要使用sys.stdin.readline()

相关内容

  • 没有找到相关文章

最新更新