2016-12-17 55 views
-1

您好我有一个代码块在这里,打算读的输入变量:不知道为什么Python的readlines方法()不在这里工作了

if __name__ == "__main__": 
    data = list(map(int, sys.stdin.readlines().split())) 
    n, capacity = data[0:2] 
    values = data[2:(2 * n + 2):2] 
    weights = data[3:(2 * n + 2):2] 
    opt_value = get_optimal_value(capacity, weights, values) 
    print("{:.10f}".format(opt_value)) 

然后自定义get_optimal_value(容量,重量,值)将被执行。输入例:

3 50 
60 20 
100 50 
120 30 

它应该做到以下几点:

n = 3 
capacity = 50 
values = [60,100,120] 
weights = [20,50,30] 

但是,代码不进行后,我在上面输入数字输入和没有给我结果。这意味着数字不会被读入变量,列表也不会被制定。我尝试将我的代码放入一个自动错误检查器中;它告诉我:

AttributeError: 'list' object has no attribute 'split' 

这是为什么,我该如何修改我的代码?

附加问题:数字读数是否自动知道停止位置,即当它检测到空间并且没有后续数字时?我假设代码会在读取所有输入数据后立即执行函数并计算结果,在流程方面是否正确?我觉得在输入输入后缺少'步骤'来通知代码'计算'。

+0

'readlines方法()'返回一个字符串列表(每行一个字符串)。你可以将它改为'read()',它将整个文件读入一个字符串,然后可以用split()分割。 – Meyer

回答

0

readlines回报list不具有法split(这是str对象的方法,它代表一个单线),因此您的代码是相同的:

l = sys.stdin.readlines() # ["0 1\n", "2 3\n"] 
l.split() 

如果你想申请split()每一行,你应该再添map拨打我们使用列表或发电机的理解,即

data = list(map(int, map(lambda line: line.split(), sys.stdin.readlines())) 
data = list(map(int, line.split() for line in sys.stdin.readlines())) 

或者使用的foreach:

data = [] 
for line in sys.stdin: 
    data.append(map(int, line.split())) 
0

readlines()返回字符串列表,split()仅针对字符串定义。如果你想返回输入的列表,每个两个整数的列表,你必须向列表中的元素:

[map(int, x.split(" ")) for x in sys.stdin.readlines().split()] 
相关问题